[Mailman-Developers] Another extend.py thing.. (was Re: MemberAdaptor... trouble with API?)

Barry A. Warsaw barry@python.org
Tue, 20 Aug 2002 19:36:54 -0400

>>>>> "SS" == Steve Spicklemire <steve@spvi.com> writes:

    SS> I think the basic issue is that when I assign the modified
    SS> method to an instance of a MailList, it get's stored in the
    SS> instance's __dict__, which during the "Save" method, is then
    SS> copied and (unsuccessfully) pickled.

Save() has a filter on names starting with underscore, and object that
are methods -- type(value) is MethodType.  But the way you're creating
the new authenticateMethod() is you're creating a function, not a
method (it's not in a class).

You could try something like the following (untested) instead, or we
could add another test in the attribute filter in Save() to ignore
functions.  Side note: all this gets much easier in Python 2.2,
because I think properties make our lives much nice.

class NewAuthenticator:
    def __init__(self, oldfunc):
        self._oldfunc = oldfunc
    def authenticateMember(member, response):
	l_r = member.split('@')
	if len(l_r) == 2:
	    if l_r[1] == 'our.domain':
		if checkLDAP(None, member, response):
		    return response
	return self._oldfunc(member, response)

def extend(mlist):
    authenticator = NewAuthenticator(mlist.authenticateMember)
    mlist.authenticateMember = authenticator.authenticateMember