Source code for fl4health.mixins.personalized.utils

from collections.abc import Callable
from typing import Any

import wrapt

from fl4health.clients.flexible.base import FlexibleClient


[docs] @wrapt.decorator def ensure_protocol_compliance(func: Callable, instance: Any | None, args: Any, kwargs: Any) -> Any: """ Wrapper to ensure that a the instance is of `FlexibleClient` type. NOTE: This should only be used within a `FlexibleClient`. Args: func (Callable): The function to be wrapped instance (Any | None): The associated instance if it is a method belonging to a class or a standalone args (Any): args passed to func kwargs (Any): kwargs passed to func Raises: TypeError: We raise this error if the instance is not a `FlexibleClient`. Returns: Any: Application of the function to the args and kwargs. """ # validate self is a FlexibleClient if not isinstance(instance, FlexibleClient): raise TypeError("Protocol requirements not met.") return func(*args, **kwargs)