79 |
argument to Python? |
argument to Python? |
80 |
*/ |
*/ |
81 |
int extpy_invokemethod(struct Instance *context, struct gl_list_t *args, void *user_data){ |
int extpy_invokemethod(struct Instance *context, struct gl_list_t *args, void *user_data){ |
82 |
PyObject *fn; |
PyObject *fn, *arglist, *result; |
83 |
/* cast user data to PyObject pointer */ |
/* cast user data to PyObject pointer */ |
84 |
|
|
85 |
|
CONSOLE_DEBUG("USER_DATA IS AT %p",user_data); |
86 |
|
|
87 |
fn = (PyObject *) user_data; |
fn = (PyObject *) user_data; |
88 |
|
|
89 |
ERROR_REPORTER_HERE(ASC_USER_NOTE,"RUNNING PYTHON METHOD"); |
ERROR_REPORTER_HERE(ASC_USER_NOTE,"RUNNING PYTHON METHOD"); |
90 |
CONSOLE_DEBUG("RUNNING PYTHON METHOD..."); |
CONSOLE_DEBUG("RUNNING PYTHON METHOD..."); |
91 |
return 1; |
|
92 |
|
PyErr_Clear(); |
93 |
|
|
94 |
|
if(!PyCallable_Check(fn)){ |
95 |
|
ERROR_REPORTER_HERE(ASC_PROG_ERR,"user_data is not a PyCallable"); |
96 |
|
return 1; |
97 |
|
} |
98 |
|
|
99 |
|
arglist = Py_BuildValue("(i)", 666); |
100 |
|
result = PyEval_CallObject(fn, arglist); |
101 |
|
Py_DECREF(arglist); |
102 |
|
if(PyErr_Occurred()){ |
103 |
|
ERROR_REPORTER_HERE(ASC_PROG_ERR,"Failed running python method"); |
104 |
|
return 1; |
105 |
|
} |
106 |
|
|
107 |
|
return 0; |
108 |
} |
} |
109 |
|
|
110 |
/*------------------------------------------------------------------------------ |
/*------------------------------------------------------------------------------ |
131 |
PyErr_SetString(PyExc_TypeError,"parameter must be callable"); |
PyErr_SetString(PyExc_TypeError,"parameter must be callable"); |
132 |
return NULL; |
return NULL; |
133 |
} |
} |
|
Py_INCREF(fn); |
|
134 |
|
|
135 |
CONSOLE_DEBUG("FOUND FN=%p",fn); |
CONSOLE_DEBUG("FOUND FN=%p",fn); |
136 |
|
|
151 |
CONSOLE_DEBUG("DOCSTRING: %s",cdocstring); |
CONSOLE_DEBUG("DOCSTRING: %s",cdocstring); |
152 |
} |
} |
153 |
|
|
154 |
res = CreateUserFunctionMethod(cname,extpy_invokemethod,nargs,cdocstring,fn); |
res = CreateUserFunctionMethod(cname,extpy_invokemethod,nargs,cdocstring,(void *)fn); |
155 |
|
CONSOLE_DEBUG("PYTHON FUNCTION IS AT %p",fn); |
156 |
|
Py_INCREF(fn); |
157 |
|
CONSOLE_DEBUG("PYTHON FUNCTION IS AT %p",fn); |
158 |
|
|
159 |
CONSOLE_DEBUG("EXTPY INVOKER IS AT %p",extpy_invokemethod); |
CONSOLE_DEBUG("EXTPY INVOKER IS AT %p",extpy_invokemethod); |
160 |
|
|