Files
colony/colony/core/dispatcher.py
T
2026-01-25 10:23:02 +01:00

35 lines
1.2 KiB
Python

from dependency_injector.wiring import inject, Provide
from colony.core.logger.logging import get_logger
class Dispatcher:
def __init__(self, network, role_registry):
self.logger = get_logger(self.__class__.__name__)
self.network = network
self.role_registry = role_registry
def dispatch(self, payload):
self.logger.debug(f"Dispatching payload for command {payload['command']['role']}.{payload["command"]['name']}")
c = payload["command"]
role_name = c["role"]
command_name = c["name"]
args = tuple(c.get("args", []))
kwargs = dict(c.get("kwargs", {}))
role_entry = self.role_registry.get_role_class_by_name(role_name)
if role_entry is None:
raise ValueError(f"Unknown role {role_name}")
commands_enum = role_entry.COMMANDS
command = commands_enum(f"{role_name}.{command_name}")
node = self.network.get_self()
self.logger.info(f"Executing {role_name}.{command_name} on local node {node.id}")
result = node.execute_local(command, *args, **kwargs)
self.logger.debug(f"Passing the results from {role_name}.{command_name}")
return result