in ftw_compatible_tool/broker.py [0:0]
def publish(self, topic, *args, **kwargs):
""" Publish messages to the topic's subscribers.
Arguments:
- topic: A TOPICS value.
- args, kwargs: Arguments sent to subscribers.
Type check will be done on these.
"""
item = self._topic_items.get(topic)
if item is None or len(item.subscribers) == 0:
return False
type_limit = item.type_limit
subscribers = item.subscribers
if type_limit:
for subscriber in subscribers:
if isinstance(subscriber, types.FunctionType):
target_args = inspect.getargspec(subscriber).args
else:
target_args = inspect.getargspec(subscriber.__call__).args
for i in range(min(len(args), len(target_args))):
if not isinstance(args[i], type_limit.get(target_args[i], type(args[i]))):
raise ValueError(
"type<%s> is not compatible with args<%s : (%s)>" %
(type_limit, i, args[i]))
for k, v in kwargs.items():
if not isinstance(v, type_limit.get(k, type(v))):
raise ValueError(
"type<%s> is not compatible with args<%s : (%s)>" %
(type_limit, k, v))
tuple(map(lambda subscriber: subscriber(*args, **kwargs), subscribers))
return True