Capsules

Consulte Providing a C API for an Extension Module para obter mais informações sobre o uso desses objetos.

Novo na versão 3.1.

PyCapsule

Este subtipo de PyObject representa um valor opaco, útil para módulos de extensão C que precisam passar um valor opaco (como ponteiro void*) através do código Python para outro código C . É frequentemente usado para disponibilizar um ponteiro de função C definido em um módulo para outros módulos, para que o mecanismo de importação regular possa ser usado para acessar APIs C definidas em módulos carregados dinamicamente.

PyCapsule_Destructor

O tipo de um retorno de chamada destruidor para uma cápsula. Definido como:

typedef void (*PyCapsule_Destructor)(PyObject *);

Veja PyCapsule_New() para a semântica dos retornos de chamada PyCapsule_Destructor.

int PyCapsule_CheckExact(PyObject *p)

Retorna true se seu argumento é um PyCapsule. Esta função sempre tem sucesso.

PyObject* PyCapsule_New(void *pointer, const char *name, PyCapsule_Destructor destructor)
Return value: New reference.

Cria um PyCapsule que encapsula o ponteiro. O argumento pointer pode não ser NULL.

Em caso de falha, define uma exceção e retorna NULL.

A string name pode ser NULL ou um ponteiro para uma string C válida. Se não for NULL, essa string deverá sobreviver à cápsula. (Embora seja permitido liberá-lo dentro do descructor.)

Se o argumento destructor não for NULL, ele será chamado com a cápsula como argumento quando for destruído.

Se esta cápsula for armazenada como um atributo de um módulo, o name deve ser especificado como modulename.attributename. Isso permitirá que outros módulos importem a cápsula usando PyCapsule_Import().

void* PyCapsule_GetPointer(PyObject *capsule, const char *name)

Recupera o pointer armazenado na cápsula. Em caso de falha, define uma exceção e retorna NULL.

O parâmetro name deve ser comparado exatamente com o nome armazenado na cápsula. Se o nome armazenado na cápsula for NULL, o name passado também deve ser NULL. Python usa a função C strcmp() para comparar nomes de cápsulas.

PyCapsule_Destructor PyCapsule_GetDestructor(PyObject *capsule)

Retorna o destruidor atual armazenado na cápsula. Em caso de falha, define uma exceção e retorna NULL.

É legal para uma cápsula ter um destruidor NULL. Isso torna um código de retorno NULL um tanto ambíguo; use PyCapsule_IsValid() ou PyErr_Occurred() para desambiguar.

void* PyCapsule_GetContext(PyObject *capsule)

Retorna o contexto atual armazenado na cápsula. Em caso de falha, define uma exceção e retorna NULL.

É legal para uma cápsula ter um contexto NULL. Isso torna um código de retorno NULL um tanto ambíguo; use PyCapsule_IsValid() ou PyErr_Occurred() para desambiguar.

const char* PyCapsule_GetName(PyObject *capsule)

Retorna o nome atual armazenado na cápsula. Em caso de falha, define uma exceção e retorna NULL.

É legal para uma cápsula ter um nome NULL. Isso torna um código de retorno NULL um tanto ambíguo; use PyCapsule_IsValid() ou PyErr_Occurred() para desambiguar.

void* PyCapsule_Import(const char *name, int no_block)

Importa um ponteiro para um objeto C de um atributo capsule em um módulo. O parâmetro name deve especificar o nome completo do atributo, como em module.attribute. O nome armazenado na cápsula deve corresponder exatamente a essa sequência. Se no_block for verdadeiro, importa o módulo sem bloquear (usando PyImport_ImportModuleNoBlock()). Se no_block for falso, importa o módulo convencionalmente (usando PyImport_ImportModule()).

Retorna o ponteiro interno pointer da cápsula com sucesso. Em caso de falha, define uma exceção e retorna NULL.

int PyCapsule_IsValid(PyObject *capsule, const char *name)

Determina se capsule é ou não uma cápsula válida. Uma cápsula válida é diferente de NULL, passa PyCapsule_CheckExact(), possui um ponteiro diferente de NULL armazenado e seu nome interno corresponde ao parâmetro name. (Consulte PyCapsule_GetPointer() para obter informações sobre como os nomes das cápsulas são comparados.)

Em outras palavras, se PyCapsule_IsValid() retornar um valor verdadeiro, as chamadas para qualquer um dos acessadores (qualquer função que comece com PyCapsule_Get()) terão êxito garantido.

Retorna um valor diferente de zero se o objeto for válido e corresponder ao nome passado. Retorna 0 caso contrário. Esta função não falhará.

int PyCapsule_SetContext(PyObject *capsule, void *context)

Define o ponteiro de contexto dentro de capsule para context.

Retorna 0 em caso de sucesso. Retorna diferente de zero e define uma exceção em caso de falha.

int PyCapsule_SetDestructor(PyObject *capsule, PyCapsule_Destructor destructor)

Define o destrutor dentro de capsule para destructor.

Retorna 0 em caso de sucesso. Retorna diferente de zero e define uma exceção em caso de falha.

int PyCapsule_SetName(PyObject *capsule, const char *name)

Define o nome dentro de capsule como name. Se não for NULL, o nome deve sobreviver à cápsula. Se o name anterior armazenado na cápsula não era NULL, nenhuma tentativa será feita para liberá-lo.

Retorna 0 em caso de sucesso. Retorna diferente de zero e define uma exceção em caso de falha.

int PyCapsule_SetPointer(PyObject *capsule, void *pointer)

Define o ponteiro nulo dentro de capsule para pointer. O ponteiro não pode ser NULL.

Retorna 0 em caso de sucesso. Retorna diferente de zero e define uma exceção em caso de falha.