From: <f.g...@fe...> - 2001-06-01 18:50:06
|
Hi, currently I'm playing with python-ldap-1.10a3 on WinNT with ActivePython 2.1.0-210b. When dealing with LDAP referrals I tried to pass a bound method object to set_rebind_proc, but it failed with the exception "expected function or None". But there is no reason why this "callback" should only work with "normal" functions in Python. So I patched the sources in file LDAPObject.c and changed the function "l_ldap_set_rebind_proc": Now the very specific check "PyFunction_Check(func)" is replaced by "PyCallable_Check(func)". Passing bound methods now work. I dont know whether this also works for older versions of Python (and there is no check whether func is a unbound method object, but here is the diff: @@ -595,15 +595,18 @@ ldap_set_rebind_proc( self->ldap, NULL, 0); #else ldap_set_rebind_proc( self->ldap, NULL ); #endif + Py_XDECREF(rebind_callback_func); rebind_callback_func = NULL; rebind_callback_ld = NULL; Py_INCREF(Py_None); return Py_None; } - if ( PyFunction_Check(func) ) { + if ( PyCallable_Check(func) ) { + Py_XDECREF(rebind_callback_func); + Py_INCREF(func); rebind_callback_func = func; rebind_callback_ld = self; #ifdef LDAP_SET_REBIND_PROC_3ARGS ldap_set_rebind_proc( self->ldap, rebind_callback, 0); @@ -613,9 +616,9 @@ Py_INCREF(Py_None); return Py_None; } - PyErr_SetString( PyExc_TypeError, "expected function or None" ); + PyErr_SetString( PyExc_TypeError, "expected function, bound method or None" ); return NULL; } static char doc_set_rebind_proc[] = Regards, Franz |