Source code for alter_ego.structure.Relay

from typing import Callable, List, Any


[docs] class Relay: """ The Relay class serves as a mediator that forwards method calls and attribute settings from a source object to multiple target objects. :ivar _source: The source object. :ivar _targets: A list of target objects. """ def __init__(self, source: Any, targets: List[Any]) -> None: """ Initialize a new Relay instance. :param source: The source object. :type source: Any :param targets: A list of target objects. :type targets: List[Any] """ self._source = source self._targets = targets def __setattr__(self, name: str, value: Any) -> None: """ Overloaded setattr to simultaneously set attributes for source and target objects. :param name: The name of the attribute to set. :type name: str :param value: The value to assign to the attribute. :type value: Any """ self.__dict__[name] = value if name not in ("_source", "_targets"): for target in self._targets: setattr(target, name, value) setattr(self._source, name, value)
[docs] def call_all(self, methodname: str, *args: Any, **kwargs: Any) -> None: """ Invoke a method on all target objects using provided arguments. :param methodname: The method's name to be called on target objects. :type methodname: str :param args: Positional arguments for the method. :type args: Any :param kwargs: Keyword arguments for the method. :type kwargs: Any """ for target in self._targets: getattr(target, methodname)(*args, **kwargs)
[docs] def save(self, *args: Any, **kwargs: Any) -> None: """ Shortcut to call 'save' method on all target objects. :param args: Positional arguments for 'save' method. :type args: Any :param kwargs: Keyword arguments for 'save' method. :type kwargs: Any """ self.call_all("save", *args, **kwargs)
[docs] def system(self, *args: Any, **kwargs: Any) -> None: """ Shortcut to call 'system' method on all target objects. :param args: Positional arguments for 'system' method. :type args: Any :param kwargs: Keyword arguments for 'system' method. :type kwargs: Any """ self.call_all("system", *args, **kwargs)