Source code for fl4health.mixins.base
"""BaseFlexibleMixin."""
from logging import ERROR
from typing import Any
from flwr.common.logger import log
from fl4health.clients.flexible.base import FlexibleClient
[docs]
class BaseFlexibleMixin:
[docs]
def __init__(self, *args: Any, **kwargs: Any) -> None:
"""Initialize a base mixin."""
super().__init__(*args, **kwargs)
def __init_subclass__(cls, **kwargs: Any) -> None:
"""This method is called when a class inherits from BaseFlexibleMixin."""
super().__init_subclass__(**kwargs)
# Skip check for other mixins
if cls.__name__.endswith("Mixin"):
return
# Skip validation for dynamically created classes
if hasattr(cls, "_dynamically_created"):
return
# Check at class definition time if the parent class satisfies FlexibleClientProtocol
for base in cls.__bases__:
if base is not BaseFlexibleMixin and issubclass(base, FlexibleClient):
return
# If we get here, no compatible base was found
msg = (
f"Class {cls.__name__} inherits from BaseFlexibleMixin but none of its other "
"base classes implement FlexibleClient."
)
log(ERROR, msg)
raise RuntimeError(msg)