Ejemplo n.º 1
0
class Condition:
    def __init__(self, pf):
        if issubclass(pf.__class__, Condition):
            self._pollFunc = pf._pollFunc
            self.status = pf.status
            self.changed = pf.changed
        else:
            self._pollFunc = pf
            self.status = self._pollFunc()
            self.changed = Event()

    def poll(self):
        oldStatus = self.status
        self.status = self._pollFunc()
        if self.status != oldStatus:
            self.changed.trigger(self.status)
            
    def parentChanged(self, newStatus):
        self.poll()

    def getStatus(self):
        return self.status

    def __invert__(self):
        nc = Condition(lambda: not self.status)
        self.changed.addResponder(nc.parentChanged)
        return nc

    def __and__(self, other):
        nc = Condition(lambda: self.status and other.status)
        self.changed.addResponder(nc.parentChanged)
        other.changed.addResponder(nc.parentChanged)
        return nc

    def __or__(self, other):
        nc = Condition(lambda: self.status or other.status)
        self.changed.addResponder(nc.parentChanged)
        other.changed.addResponder(nc.parentChanged)
        return nc