[PEAK] Trellis on_commit and Performers

Sergey Schetinin maluke at gmail.com
Sun Oct 5 14:46:26 EDT 2008


Much closer to have it all working, but two more issues.

First is that if the value is not subscribed to, it will return stale
data later. For example window position, a new frame might want to be
created at a position relative to parent, but a read of .position
would return a position where it was created, not current value.
Another layer with @compute depending on .watching should solve this
as well.

Second, things like this don't work:

class Test(trellis.Component):
    @trellis.maintain
    def value(self):
        return False

@trellis.atomically
def test():
    t1 = Test()
    t1.value = True

There's a good reason for that, but there's no need to initialize
.value on instance creation. @trellis.maintain(optional=True) seems to
do the trick, but isn't generally a bad idea to allow maintain rules
to be optional all? Surely in this case it's fine, but in my mind it's
not really a normal maintain rule, or is it?


This seems to work better:

    @trellis.compute
    def value(self):
        val = self._value
        if self.watching:
            return val
        return self.decode(self.wxread())

    @trellis.maintain(optional=True)
    def _value(self):
        if self.watching:
            evt = getattr(self.ob, self.attr.event_name)
            if evt is not None:
                if self.decode_event is not None:
                    return self.decode_event(evt)
        return self.decode(self.wxread())


Other than @maintain Effectors running three times instead of one
everything works great so far. Many thanks for your guidance.



More information about the PEAK mailing list