dispatcher: support additional arguments
authorDmitry Selyutin <ghostmansd@gmail.com>
Fri, 23 Jun 2023 08:28:38 +0000 (11:28 +0300)
committerDmitry Selyutin <ghostmansd@gmail.com>
Fri, 23 Jun 2023 08:28:38 +0000 (11:28 +0300)
src/mdis/dispatcher.py

index c956e0c9e283b3c9eac78e13eb77fe179a6137b1..63b1ebb0888b53be59d4b16829fdc9e5715e48c7 100644 (file)
@@ -33,8 +33,11 @@ class Hook(object):
 
     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))
 
@@ -81,15 +84,15 @@ class DispatcherMeta(type):
 
 
 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()