From 9960149e3f84564ab324bfb9db7c50063d87a7bd Mon Sep 17 00:00:00 2001 From: Petr Viktorin Date: Wed, 25 Apr 2012 10:31:10 -0400 Subject: Rework the CallbackInterface Fix several problems with the callback interface: - Automatically registered callbacks (i.e. methods named exc_callback, pre_callback etc) were registered on every instantiation. Fix: Do not register callbacks in __init__; instead return the method when asked for it. - The calling code had to distinguish between bound methods and plain functions by checking the 'im_self' attribute. Fix: Always return the "default" callback as an unbound method. Registered callbacks now always take the extra `self` argument, whether they happen to be bound methods or not. Calling code now always needs to pass the `self` argument. - Did not work well with inheritance: due to the fact that Python looks up missing attributes in superclasses, callbacks could get attached to a superclass if it was instantiated early enough. * Fix: Instead of attribute lookup, use a dictionary with class keys. - The interface included the callback types, which are LDAP-specific. Fix: Create generic register_callback and get_callback mehods, move LDAP-specific code to BaseLDAPCommand Update code that calls the callbacks. Add tests. Remove lint exceptions for CallbackInterface. * https://fedorahosted.org/freeipa/ticket/2674 --- make-lint | 2 -- 1 file changed, 2 deletions(-) (limited to 'make-lint') diff --git a/make-lint b/make-lint index 7ecd59d7e..f61926043 100755 --- a/make-lint +++ b/make-lint @@ -51,8 +51,6 @@ class IPATypeChecker(TypeChecker): 'ipalib.plugable.Plugin': ['Command', 'Object', 'Method', 'Property', 'Backend', 'env', 'debug', 'info', 'warning', 'error', 'critical', 'exception', 'context', 'log'], - 'ipalib.plugins.baseldap.CallbackInterface': ['pre_callback', - 'post_callback', 'exc_callback'], 'ipalib.plugins.misc.env': ['env'], 'ipalib.parameters.Param': ['cli_name', 'cli_short_name', 'label', 'doc', 'required', 'multivalue', 'primary_key', 'normalizer', -- cgit