You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
18 lines
441 B
18 lines
441 B
# -*- encoding: utf-8 -*-
|
|
|
|
from collections import defaultdict
|
|
|
|
|
|
class Signal(object):
|
|
|
|
def __init__(self, *subscriber):
|
|
self.subscriptions = defaultdict(list)
|
|
|
|
for sub in subscriber:
|
|
for signal, func in sub:
|
|
self.subscriptions[signal].append(func)
|
|
|
|
def __call__(self, origin, *args, **kwargs):
|
|
for subscriber in self.subscriptions[origin]:
|
|
subscriber(*args, **kwargs)
|