call method
Calls the python function with dart args marshalled back and forth
Implementation
Object call(List<Object?> args) {
final pArgs = dartpyc.PyTuple_New(args.length);
if (pArgs == nullptr) {
throw DartPyException('Creating argument tuple failed');
}
final pyObjs = <PyObjAllocated>[];
for (var i = 0; i < args.length; i++) {
PyObjAllocated? arg;
try {
arg = pyConvertDynamic(args[i]);
dartpyc.PyTuple_SetItem(pArgs, i, arg.pyObj);
} on DartPyException catch (e) {
if (arg != null) {
dartpyc.Py_DecRef(arg.pyObj);
}
dartpyc.Py_DecRef(pArgs);
throw DartPyException(
'Failed while converting argument ${args[i]} with error $e');
}
}
final result = dartpyc.PyObject_CallObject(_function, pArgs);
pyObjs.forEach((p) => p.dealloc());
dartpyc.Py_DecRef(pArgs);
return pyConvertBackDynamic(result)!;
}