Using set_rebind_proc(func) with a bound method
f.glasner at feldmann-mg.com
f.glasner at feldmann-mg.com
Fri Jun 1 20:53:23 CEST 2001
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
More information about the python-ldap
mailing list