A concise Publish/Subscribe utility module. It supports both free-form signal names and a stricter style where signals are declared first. You can also mix them.
import smoke
class MyCls(smoke.Broker):
appears = smoke.signal('appears')
leaves = smoke.signal('leaves')
def say_hello(what):
print("hello %s" % (what,))
def say_goodbye(what):
print("good bye %s" % (what,))
o = MyCls()
# Using broker
o.subscribe("appears", say_hello)
o.publish("appears", what='world')
# Using declared signals
o.leaves.subscribe(say_goodbye)
o.leaves.publish(what='world')