from __future__ import annotations from typing import Any, Dict from uuid import uuid4 class CampaignParticipant: def __init__( self, *, war_participant_id: str, leader: str | None, theme: str | None ): self.id: str = str(uuid4()) self.war_participant_id: str = war_participant_id # ref to War.participants self.leader: str | None = leader self.theme: str | None = theme def set_id(self, new_id: str) -> None: self.id = new_id def set_war_participant(self, new_participant: str) -> None: self.war_participant_id = new_participant def set_leader(self, new_faction: str) -> None: self.leader = new_faction def set_theme(self, new_theme: str) -> None: self.theme = new_theme def toDict(self) -> Dict[str, Any]: return { "id": self.id, "war_participant_id": self.war_participant_id, "leader": self.leader, "theme": self.theme, } @staticmethod def fromDict(data: Dict[str, Any]) -> CampaignParticipant: part = CampaignParticipant( war_participant_id=data["war_participant_id"], leader=data.get("leader"), theme=data.get("theme"), ) part.set_id(data["id"]) return part