dispatcher: support args and kwargs
authorDmitry Selyutin <ghostmansd@gmail.com>
Tue, 20 Jun 2023 18:16:50 +0000 (21:16 +0300)
committerDmitry Selyutin <ghostmansd@gmail.com>
Tue, 20 Jun 2023 18:16:50 +0000 (21:16 +0300)
src/mdis/dispatcher.py

index a23cd027315ec64ba77ff35ae5e354bf0fba63ac..7add02773109ff52ffc880dedf4a779ef56abc18 100644 (file)
@@ -33,8 +33,9 @@ class Hook(object):
 
     def __call__(self, call):
         class ConcreteHook(Hook):
-            def __call__(self, dispatcher, instance):
-                return call(self=dispatcher, instance=instance)
+            def __call__(self, dispatcher, instance, *args, **kwargs):
+                return call(self=dispatcher, instance=instance,
+                    *args, **kwargs)
 
         return ConcreteHook(*tuple(self))
 
@@ -81,15 +82,15 @@ class DispatcherMeta(type):
 
 
 class Dispatcher(metaclass=DispatcherMeta):
-    def __call__(self, instance):
+    def __call__(self, instance, *args, **kwargs):
         for typeid in instance.__class__.__mro__:
             hook = self.__class__.dispatch(typeid=typeid)
             if hook is not None:
                 break
         if hook is None:
             hook = self.__class__.dispatch()
-        return hook(dispatcher=self, instance=instance)
+        return hook(dispatcher=self, instance=instance, *args, **kwargs)
 
     @Hook(object)
-    def dispatch_object(self, instance):
+    def dispatch_object(self, instance, *args, **kwargs):
         raise NotImplementedError()