def __call__(self, call):
class ConcreteHook(Hook):
- def __call__(self, dispatcher, node, *args, **kwargs):
- return call(dispatcher, node, *args, **kwargs)
+ def __call__(self, dispatcher, node, *arguments):
+ try:
+ return call(dispatcher, node, *arguments)
+ except TypeError:
+ return call(dispatcher, node)
return ConcreteHook(*tuple(self))
class Dispatcher(metaclass=DispatcherMeta):
- def __call__(self, node, *args, **kwargs):
+ def __call__(self, node, *arguments):
for typeid in node.__class__.__mro__:
hook = self.__class__.dispatch(typeid=typeid)
if hook is not None:
break
if hook is None:
hook = self.__class__.dispatch()
- return hook(self, node, *args, **kwargs)
+ return hook(self, node, *arguments)
@Hook(object)
- def dispatch_object(self, node, *args, **kwargs):
+ def dispatch_object(self, node, *arguments):
raise NotImplementedError()