Source code for rizemind.authentication.authenticated_client_properties
from eth_typing import ChecksumAddress
from flwr.server.client_proxy import ClientProxy
from pydantic import BaseModel
from rizemind.configuration.transform import from_properties, to_properties
from rizemind.exception.parse_exception import catch_parse_errors
AUTHENTICATED_CLIENT_PROPERTIES_PREFIX = "rizemind.authenticated_client_properties"
[docs]
class AuthenticatedClientProperties(BaseModel):
"""The authenticated properties of a Flower client.
Attributes:
trainer_address: The trainer's wallet address.
"""
trainer_address: ChecksumAddress
[docs]
def tag_client(self, client: ClientProxy):
"""Updates the `properties` dictionary of a client with its authentication properties.
Args:
client: The client to tag.
"""
properties = to_properties(
self.model_dump(), AUTHENTICATED_CLIENT_PROPERTIES_PREFIX
)
client.properties.update(properties)
[docs]
@catch_parse_errors
@staticmethod
def from_client(client: ClientProxy) -> "AuthenticatedClientProperties":
"""Constructs an AuthenticatedClientProperties instance from a client's properties.
Args:
client: The client from which to extract properties from.
Returns:
An instance of AuthenticatedClientProperties.
"""
properties = client.properties
return AuthenticatedClientProperties(
**from_properties(properties)["rizemind"]["authenticated_client_properties"]
)