[TransWarp] multiple class advisors

Radek Kanovsky rk at dat.cz
Thu Oct 2 15:59:29 EDT 2003


Hi,

I have a problem with my simple advisor. It shadows protocols.advise
when used both together. Additionally it is order dependent. When I swap
advisors order (myadvisor call is before protocols.advise call), everything
works OK. This is simplified code that fails in adapt call:

    from peak.api import *
    from protocols.advice import addClassAdvisor

    class IInterface (protocols.Interface) :
        pass

    def myadvisor(a) :
        def callback (klass) :
            cd = klass.__dict__.copy()
            cd['_myadvisor'] = binding.Make(a)
            meta = type(klass)
            return meta(klass.__name__, klass.__bases__, cd)
        addClassAdvisor(callback)

    class MyComponent (binding.Component) :
        protocols.advise(instancesProvide = [IInterface])
        myadvisor(dict)

    comp = MyComponent()
    acomp = adapt(comp, IInterface) # FAIL
    assert comp is acomp
    print comp._myadvisor

Can we extend somehow class in class advisors? I am not sure
if extending class with binding in advisor is correct.

Regards,

RadekK



More information about the PEAK mailing list