gh-90241: Clarify documentation for PyUnicode_FSConverter and PyUnicode_FSDecoder (GH-128451)
Co-authored-by: Stan Ulbrych <89152624+StanFromIreland@users.noreply.github.com> Co-authored-by: Erlend E. Aasland <erlend.aasland@protonmail.com>
This commit is contained in:
parent
1ef6bf4e29
commit
657d7b77e5
@ -319,7 +319,7 @@ Other objects
|
|||||||
|
|
||||||
.. _o_ampersand:
|
.. _o_ampersand:
|
||||||
|
|
||||||
``O&`` (object) [*converter*, *anything*]
|
``O&`` (object) [*converter*, *address*]
|
||||||
Convert a Python object to a C variable through a *converter* function. This
|
Convert a Python object to a C variable through a *converter* function. This
|
||||||
takes two arguments: the first is a function, the second is the address of a C
|
takes two arguments: the first is a function, the second is the address of a C
|
||||||
variable (of arbitrary type), converted to :c:expr:`void *`. The *converter*
|
variable (of arbitrary type), converted to :c:expr:`void *`. The *converter*
|
||||||
@ -333,14 +333,20 @@ Other objects
|
|||||||
the conversion has failed. When the conversion fails, the *converter* function
|
the conversion has failed. When the conversion fails, the *converter* function
|
||||||
should raise an exception and leave the content of *address* unmodified.
|
should raise an exception and leave the content of *address* unmodified.
|
||||||
|
|
||||||
If the *converter* returns ``Py_CLEANUP_SUPPORTED``, it may get called a
|
.. c:macro:: Py_CLEANUP_SUPPORTED
|
||||||
|
:no-typesetting:
|
||||||
|
|
||||||
|
If the *converter* returns :c:macro:`!Py_CLEANUP_SUPPORTED`, it may get called a
|
||||||
second time if the argument parsing eventually fails, giving the converter a
|
second time if the argument parsing eventually fails, giving the converter a
|
||||||
chance to release any memory that it had already allocated. In this second
|
chance to release any memory that it had already allocated. In this second
|
||||||
call, the *object* parameter will be ``NULL``; *address* will have the same value
|
call, the *object* parameter will be ``NULL``; *address* will have the same value
|
||||||
as in the original call.
|
as in the original call.
|
||||||
|
|
||||||
|
Examples of converters: :c:func:`PyUnicode_FSConverter` and
|
||||||
|
:c:func:`PyUnicode_FSDecoder`.
|
||||||
|
|
||||||
.. versionchanged:: 3.1
|
.. versionchanged:: 3.1
|
||||||
``Py_CLEANUP_SUPPORTED`` was added.
|
:c:macro:`!Py_CLEANUP_SUPPORTED` was added.
|
||||||
|
|
||||||
``p`` (:class:`bool`) [int]
|
``p`` (:class:`bool`) [int]
|
||||||
Tests the value passed in for truth (a boolean **p**\ redicate) and converts
|
Tests the value passed in for truth (a boolean **p**\ redicate) and converts
|
||||||
|
@ -786,16 +786,25 @@ Functions encoding to and decoding from the :term:`filesystem encoding and
|
|||||||
error handler` (:pep:`383` and :pep:`529`).
|
error handler` (:pep:`383` and :pep:`529`).
|
||||||
|
|
||||||
To encode file names to :class:`bytes` during argument parsing, the ``"O&"``
|
To encode file names to :class:`bytes` during argument parsing, the ``"O&"``
|
||||||
converter should be used, passing :c:func:`PyUnicode_FSConverter` as the
|
converter should be used, passing :c:func:`!PyUnicode_FSConverter` as the
|
||||||
conversion function:
|
conversion function:
|
||||||
|
|
||||||
.. c:function:: int PyUnicode_FSConverter(PyObject* obj, void* result)
|
.. c:function:: int PyUnicode_FSConverter(PyObject* obj, void* result)
|
||||||
|
|
||||||
ParseTuple converter: encode :class:`str` objects -- obtained directly or
|
:ref:`PyArg_Parse\* converter <arg-parsing>`: encode :class:`str` objects -- obtained directly or
|
||||||
through the :class:`os.PathLike` interface -- to :class:`bytes` using
|
through the :class:`os.PathLike` interface -- to :class:`bytes` using
|
||||||
:c:func:`PyUnicode_EncodeFSDefault`; :class:`bytes` objects are output as-is.
|
:c:func:`PyUnicode_EncodeFSDefault`; :class:`bytes` objects are output as-is.
|
||||||
*result* must be a :c:expr:`PyBytesObject*` which must be released when it is
|
*result* must be an address of a C variable of type :c:expr:`PyObject*`
|
||||||
no longer used.
|
(or :c:expr:`PyBytesObject*`).
|
||||||
|
On success, set the variable to a new :term:`strong reference` to
|
||||||
|
a :ref:`bytes object <bytesobjects>` which must be released
|
||||||
|
when it is no longer used and return a non-zero value
|
||||||
|
(:c:macro:`Py_CLEANUP_SUPPORTED`).
|
||||||
|
Embedded null bytes are not allowed in the result.
|
||||||
|
On failure, return ``0`` with an exception set.
|
||||||
|
|
||||||
|
If *obj* is ``NULL``, the function releases a strong reference
|
||||||
|
stored in the variable referred by *result* and returns ``1``.
|
||||||
|
|
||||||
.. versionadded:: 3.1
|
.. versionadded:: 3.1
|
||||||
|
|
||||||
@ -803,16 +812,26 @@ conversion function:
|
|||||||
Accepts a :term:`path-like object`.
|
Accepts a :term:`path-like object`.
|
||||||
|
|
||||||
To decode file names to :class:`str` during argument parsing, the ``"O&"``
|
To decode file names to :class:`str` during argument parsing, the ``"O&"``
|
||||||
converter should be used, passing :c:func:`PyUnicode_FSDecoder` as the
|
converter should be used, passing :c:func:`!PyUnicode_FSDecoder` as the
|
||||||
conversion function:
|
conversion function:
|
||||||
|
|
||||||
.. c:function:: int PyUnicode_FSDecoder(PyObject* obj, void* result)
|
.. c:function:: int PyUnicode_FSDecoder(PyObject* obj, void* result)
|
||||||
|
|
||||||
ParseTuple converter: decode :class:`bytes` objects -- obtained either
|
:ref:`PyArg_Parse\* converter <arg-parsing>`: decode :class:`bytes` objects -- obtained either
|
||||||
directly or indirectly through the :class:`os.PathLike` interface -- to
|
directly or indirectly through the :class:`os.PathLike` interface -- to
|
||||||
:class:`str` using :c:func:`PyUnicode_DecodeFSDefaultAndSize`; :class:`str`
|
:class:`str` using :c:func:`PyUnicode_DecodeFSDefaultAndSize`; :class:`str`
|
||||||
objects are output as-is. *result* must be a :c:expr:`PyUnicodeObject*` which
|
objects are output as-is.
|
||||||
must be released when it is no longer used.
|
*result* must be an address of a C variable of type :c:expr:`PyObject*`
|
||||||
|
(or :c:expr:`PyUnicodeObject*`).
|
||||||
|
On success, set the variable to a new :term:`strong reference` to
|
||||||
|
a :ref:`Unicode object <unicodeobjects>` which must be released
|
||||||
|
when it is no longer used and return a non-zero value
|
||||||
|
(:c:macro:`Py_CLEANUP_SUPPORTED`).
|
||||||
|
Embedded null characters are not allowed in the result.
|
||||||
|
On failure, return ``0`` with an exception set.
|
||||||
|
|
||||||
|
If *obj* is ``NULL``, release the strong reference
|
||||||
|
to the object referred to by *result* and return ``1``.
|
||||||
|
|
||||||
.. versionadded:: 3.2
|
.. versionadded:: 3.2
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user