17db96d56Sopenharmony_ci.. highlight:: c 27db96d56Sopenharmony_ci 37db96d56Sopenharmony_ci.. _capsules: 47db96d56Sopenharmony_ci 57db96d56Sopenharmony_ciCapsules 67db96d56Sopenharmony_ci-------- 77db96d56Sopenharmony_ci 87db96d56Sopenharmony_ci.. index:: pair: object; Capsule 97db96d56Sopenharmony_ci 107db96d56Sopenharmony_ciRefer to :ref:`using-capsules` for more information on using these objects. 117db96d56Sopenharmony_ci 127db96d56Sopenharmony_ci.. versionadded:: 3.1 137db96d56Sopenharmony_ci 147db96d56Sopenharmony_ci 157db96d56Sopenharmony_ci.. c:type:: PyCapsule 167db96d56Sopenharmony_ci 177db96d56Sopenharmony_ci This subtype of :c:type:`PyObject` represents an opaque value, useful for C 187db96d56Sopenharmony_ci extension modules who need to pass an opaque value (as a :c:expr:`void*` 197db96d56Sopenharmony_ci pointer) through Python code to other C code. It is often used to make a C 207db96d56Sopenharmony_ci function pointer defined in one module available to other modules, so the 217db96d56Sopenharmony_ci regular import mechanism can be used to access C APIs defined in dynamically 227db96d56Sopenharmony_ci loaded modules. 237db96d56Sopenharmony_ci 247db96d56Sopenharmony_ci 257db96d56Sopenharmony_ci.. c:type:: PyCapsule_Destructor 267db96d56Sopenharmony_ci 277db96d56Sopenharmony_ci The type of a destructor callback for a capsule. Defined as:: 287db96d56Sopenharmony_ci 297db96d56Sopenharmony_ci typedef void (*PyCapsule_Destructor)(PyObject *); 307db96d56Sopenharmony_ci 317db96d56Sopenharmony_ci See :c:func:`PyCapsule_New` for the semantics of PyCapsule_Destructor 327db96d56Sopenharmony_ci callbacks. 337db96d56Sopenharmony_ci 347db96d56Sopenharmony_ci 357db96d56Sopenharmony_ci.. c:function:: int PyCapsule_CheckExact(PyObject *p) 367db96d56Sopenharmony_ci 377db96d56Sopenharmony_ci Return true if its argument is a :c:type:`PyCapsule`. This function always 387db96d56Sopenharmony_ci succeeds. 397db96d56Sopenharmony_ci 407db96d56Sopenharmony_ci 417db96d56Sopenharmony_ci.. c:function:: PyObject* PyCapsule_New(void *pointer, const char *name, PyCapsule_Destructor destructor) 427db96d56Sopenharmony_ci 437db96d56Sopenharmony_ci Create a :c:type:`PyCapsule` encapsulating the *pointer*. The *pointer* 447db96d56Sopenharmony_ci argument may not be ``NULL``. 457db96d56Sopenharmony_ci 467db96d56Sopenharmony_ci On failure, set an exception and return ``NULL``. 477db96d56Sopenharmony_ci 487db96d56Sopenharmony_ci The *name* string may either be ``NULL`` or a pointer to a valid C string. If 497db96d56Sopenharmony_ci non-``NULL``, this string must outlive the capsule. (Though it is permitted to 507db96d56Sopenharmony_ci free it inside the *destructor*.) 517db96d56Sopenharmony_ci 527db96d56Sopenharmony_ci If the *destructor* argument is not ``NULL``, it will be called with the 537db96d56Sopenharmony_ci capsule as its argument when it is destroyed. 547db96d56Sopenharmony_ci 557db96d56Sopenharmony_ci If this capsule will be stored as an attribute of a module, the *name* should 567db96d56Sopenharmony_ci be specified as ``modulename.attributename``. This will enable other modules 577db96d56Sopenharmony_ci to import the capsule using :c:func:`PyCapsule_Import`. 587db96d56Sopenharmony_ci 597db96d56Sopenharmony_ci 607db96d56Sopenharmony_ci.. c:function:: void* PyCapsule_GetPointer(PyObject *capsule, const char *name) 617db96d56Sopenharmony_ci 627db96d56Sopenharmony_ci Retrieve the *pointer* stored in the capsule. On failure, set an exception 637db96d56Sopenharmony_ci and return ``NULL``. 647db96d56Sopenharmony_ci 657db96d56Sopenharmony_ci The *name* parameter must compare exactly to the name stored in the capsule. 667db96d56Sopenharmony_ci If the name stored in the capsule is ``NULL``, the *name* passed in must also 677db96d56Sopenharmony_ci be ``NULL``. Python uses the C function :c:func:`strcmp` to compare capsule 687db96d56Sopenharmony_ci names. 697db96d56Sopenharmony_ci 707db96d56Sopenharmony_ci 717db96d56Sopenharmony_ci.. c:function:: PyCapsule_Destructor PyCapsule_GetDestructor(PyObject *capsule) 727db96d56Sopenharmony_ci 737db96d56Sopenharmony_ci Return the current destructor stored in the capsule. On failure, set an 747db96d56Sopenharmony_ci exception and return ``NULL``. 757db96d56Sopenharmony_ci 767db96d56Sopenharmony_ci It is legal for a capsule to have a ``NULL`` destructor. This makes a ``NULL`` 777db96d56Sopenharmony_ci return code somewhat ambiguous; use :c:func:`PyCapsule_IsValid` or 787db96d56Sopenharmony_ci :c:func:`PyErr_Occurred` to disambiguate. 797db96d56Sopenharmony_ci 807db96d56Sopenharmony_ci 817db96d56Sopenharmony_ci.. c:function:: void* PyCapsule_GetContext(PyObject *capsule) 827db96d56Sopenharmony_ci 837db96d56Sopenharmony_ci Return the current context stored in the capsule. On failure, set an 847db96d56Sopenharmony_ci exception and return ``NULL``. 857db96d56Sopenharmony_ci 867db96d56Sopenharmony_ci It is legal for a capsule to have a ``NULL`` context. This makes a ``NULL`` 877db96d56Sopenharmony_ci return code somewhat ambiguous; use :c:func:`PyCapsule_IsValid` or 887db96d56Sopenharmony_ci :c:func:`PyErr_Occurred` to disambiguate. 897db96d56Sopenharmony_ci 907db96d56Sopenharmony_ci 917db96d56Sopenharmony_ci.. c:function:: const char* PyCapsule_GetName(PyObject *capsule) 927db96d56Sopenharmony_ci 937db96d56Sopenharmony_ci Return the current name stored in the capsule. On failure, set an exception 947db96d56Sopenharmony_ci and return ``NULL``. 957db96d56Sopenharmony_ci 967db96d56Sopenharmony_ci It is legal for a capsule to have a ``NULL`` name. This makes a ``NULL`` return 977db96d56Sopenharmony_ci code somewhat ambiguous; use :c:func:`PyCapsule_IsValid` or 987db96d56Sopenharmony_ci :c:func:`PyErr_Occurred` to disambiguate. 997db96d56Sopenharmony_ci 1007db96d56Sopenharmony_ci 1017db96d56Sopenharmony_ci.. c:function:: void* PyCapsule_Import(const char *name, int no_block) 1027db96d56Sopenharmony_ci 1037db96d56Sopenharmony_ci Import a pointer to a C object from a capsule attribute in a module. The 1047db96d56Sopenharmony_ci *name* parameter should specify the full name to the attribute, as in 1057db96d56Sopenharmony_ci ``module.attribute``. The *name* stored in the capsule must match this 1067db96d56Sopenharmony_ci string exactly. 1077db96d56Sopenharmony_ci 1087db96d56Sopenharmony_ci Return the capsule's internal *pointer* on success. On failure, set an 1097db96d56Sopenharmony_ci exception and return ``NULL``. 1107db96d56Sopenharmony_ci 1117db96d56Sopenharmony_ci .. versionchanged:: 3.3 1127db96d56Sopenharmony_ci *no_block* has no effect anymore. 1137db96d56Sopenharmony_ci 1147db96d56Sopenharmony_ci 1157db96d56Sopenharmony_ci.. c:function:: int PyCapsule_IsValid(PyObject *capsule, const char *name) 1167db96d56Sopenharmony_ci 1177db96d56Sopenharmony_ci Determines whether or not *capsule* is a valid capsule. A valid capsule is 1187db96d56Sopenharmony_ci non-``NULL``, passes :c:func:`PyCapsule_CheckExact`, has a non-``NULL`` pointer 1197db96d56Sopenharmony_ci stored in it, and its internal name matches the *name* parameter. (See 1207db96d56Sopenharmony_ci :c:func:`PyCapsule_GetPointer` for information on how capsule names are 1217db96d56Sopenharmony_ci compared.) 1227db96d56Sopenharmony_ci 1237db96d56Sopenharmony_ci In other words, if :c:func:`PyCapsule_IsValid` returns a true value, calls to 1247db96d56Sopenharmony_ci any of the accessors (any function starting with :c:func:`PyCapsule_Get`) are 1257db96d56Sopenharmony_ci guaranteed to succeed. 1267db96d56Sopenharmony_ci 1277db96d56Sopenharmony_ci Return a nonzero value if the object is valid and matches the name passed in. 1287db96d56Sopenharmony_ci Return ``0`` otherwise. This function will not fail. 1297db96d56Sopenharmony_ci 1307db96d56Sopenharmony_ci 1317db96d56Sopenharmony_ci.. c:function:: int PyCapsule_SetContext(PyObject *capsule, void *context) 1327db96d56Sopenharmony_ci 1337db96d56Sopenharmony_ci Set the context pointer inside *capsule* to *context*. 1347db96d56Sopenharmony_ci 1357db96d56Sopenharmony_ci Return ``0`` on success. Return nonzero and set an exception on failure. 1367db96d56Sopenharmony_ci 1377db96d56Sopenharmony_ci 1387db96d56Sopenharmony_ci.. c:function:: int PyCapsule_SetDestructor(PyObject *capsule, PyCapsule_Destructor destructor) 1397db96d56Sopenharmony_ci 1407db96d56Sopenharmony_ci Set the destructor inside *capsule* to *destructor*. 1417db96d56Sopenharmony_ci 1427db96d56Sopenharmony_ci Return ``0`` on success. Return nonzero and set an exception on failure. 1437db96d56Sopenharmony_ci 1447db96d56Sopenharmony_ci 1457db96d56Sopenharmony_ci.. c:function:: int PyCapsule_SetName(PyObject *capsule, const char *name) 1467db96d56Sopenharmony_ci 1477db96d56Sopenharmony_ci Set the name inside *capsule* to *name*. If non-``NULL``, the name must 1487db96d56Sopenharmony_ci outlive the capsule. If the previous *name* stored in the capsule was not 1497db96d56Sopenharmony_ci ``NULL``, no attempt is made to free it. 1507db96d56Sopenharmony_ci 1517db96d56Sopenharmony_ci Return ``0`` on success. Return nonzero and set an exception on failure. 1527db96d56Sopenharmony_ci 1537db96d56Sopenharmony_ci 1547db96d56Sopenharmony_ci.. c:function:: int PyCapsule_SetPointer(PyObject *capsule, void *pointer) 1557db96d56Sopenharmony_ci 1567db96d56Sopenharmony_ci Set the void pointer inside *capsule* to *pointer*. The pointer may not be 1577db96d56Sopenharmony_ci ``NULL``. 1587db96d56Sopenharmony_ci 1597db96d56Sopenharmony_ci Return ``0`` on success. Return nonzero and set an exception on failure. 160