Pavel Zůna wrote:
This is somewhat of a tech-preview patch. It works, but the whole concept might need some more work/thinking done.

It adds another way to extend plugins without resorting to the versioning system.

Until now, every baseldap command had two callbacks. The pre-callback called before data was passed to python-ldap and the post-callback called after.

This patch introduces class methods, that enable the registration of new pre/post callbacks. It supports top level functions as well, so you don't have to touch the original class at all.

It works likes this:

from ipalib.plugins.user import user_show

def test_callback(inst, ldap, dn, attrs_list, *keys, **options):
    inst.log.info('hello callback world!')
    attrs_list = ['uid'] # only retrieve the user name
    return dn

user_show.register_pre_callback(test_callback)

The original callbacks defined in the class are always called first.

Pavel

I think I'd like another registration argument, sort of a hint on where you'd like this plugin registered: first or last (defaulting to last). We wouldn't necessarily guarantee where the plugin would get registered but we could easily handle prepending or appending the new registration.

Not sure how complicated we want this to be but we could also add a dependency system, so that if some other callback is registered, then this one comes first (or registration fails), etc.

rob

_______________________________________________
Freeipa-devel mailing list
[email protected]
https://www.redhat.com/mailman/listinfo/freeipa-devel

Reply via email to