manage deleted refered player, participant, objective, sector
This commit is contained in:
parent
7afbb5ea1d
commit
7fbdacf97c
6 changed files with 322 additions and 81 deletions
|
|
@ -4,6 +4,7 @@ import json
|
|||
import shutil
|
||||
from datetime import datetime
|
||||
|
||||
from warchron.model.exception import DeletionForbidden
|
||||
from warchron.model.player import Player
|
||||
from warchron.model.war import War
|
||||
from warchron.model.war_participant import WarParticipant
|
||||
|
|
@ -84,7 +85,16 @@ class Model:
|
|||
return list(self.players.values())
|
||||
|
||||
def remove_player(self, player_id: str) -> None:
|
||||
# TODO manage war_participants referring to it
|
||||
wars_using_player: List[str] = []
|
||||
for war in self.wars.values():
|
||||
if war.has_player(player_id):
|
||||
wars_using_player.append(war.name)
|
||||
if wars_using_player:
|
||||
wars_str = ", ".join(wars_using_player)
|
||||
raise DeletionForbidden(
|
||||
f"This player is participating in war(s): {wars_str}.\n"
|
||||
"Remove it from participants first."
|
||||
)
|
||||
del self.players[player_id]
|
||||
|
||||
# War methods
|
||||
|
|
@ -100,6 +110,7 @@ class Model:
|
|||
def get_war(self, id: str) -> War:
|
||||
return self.wars[id]
|
||||
|
||||
# TODO replace multiloops by internal has_* method
|
||||
def get_war_by_campaign(self, campaign_id: str) -> War:
|
||||
for war in self.wars.values():
|
||||
for camp in war.campaigns:
|
||||
|
|
@ -107,6 +118,7 @@ class Model:
|
|||
return war
|
||||
raise KeyError(f"Campaign {campaign_id} not found in any War")
|
||||
|
||||
# TODO replace multiloops by internal has_* method
|
||||
def get_war_by_sector(self, sector_id: str) -> War:
|
||||
for war in self.wars.values():
|
||||
for camp in war.campaigns:
|
||||
|
|
@ -115,6 +127,7 @@ class Model:
|
|||
return war
|
||||
raise KeyError(f"Sector {sector_id} not found in any War")
|
||||
|
||||
# TODO replace multiloops by internal has_* method
|
||||
def get_war_by_round(self, round_id: str) -> War:
|
||||
for war in self.wars.values():
|
||||
for camp in war.campaigns:
|
||||
|
|
@ -123,6 +136,7 @@ class Model:
|
|||
return war
|
||||
raise KeyError(f"Round {round_id} not found in any War")
|
||||
|
||||
# TODO replace multiloops by internal has_* method
|
||||
def get_war_by_objective(self, objective_id: str) -> War:
|
||||
for war in self.wars.values():
|
||||
for obj in war.objectives.values():
|
||||
|
|
@ -160,6 +174,7 @@ class Model:
|
|||
war = self.get_war(war_id)
|
||||
return war.add_objective(name, description)
|
||||
|
||||
# TODO replace multiloops by internal has_* method
|
||||
def get_objective(self, objective_id: str) -> Objective:
|
||||
for war in self.wars.values():
|
||||
for obj in war.objectives.values():
|
||||
|
|
@ -191,6 +206,7 @@ class Model:
|
|||
war = self.get_war(war_id)
|
||||
return war.add_war_participant(player_id, faction)
|
||||
|
||||
# TODO replace multiloops by internal has_* method
|
||||
def get_war_participant(self, participant_id: str) -> WarParticipant:
|
||||
for war in self.wars.values():
|
||||
for part in war.participants.values():
|
||||
|
|
@ -219,6 +235,7 @@ class Model:
|
|||
war = self.get_war(war_id)
|
||||
return war.add_campaign(name, month)
|
||||
|
||||
# TODO replace multiloops by internal has_* method
|
||||
def get_campaign(self, campaign_id: str) -> Campaign:
|
||||
for war in self.wars.values():
|
||||
for campaign in war.campaigns:
|
||||
|
|
@ -269,6 +286,7 @@ class Model:
|
|||
camp = self.get_campaign(campaign_id)
|
||||
return camp.add_sector(name, round_id, major_id, minor_id, influence_id)
|
||||
|
||||
# TODO replace multiloops by internal has_* method
|
||||
def get_sector(self, sector_id: str) -> Sector:
|
||||
for war in self.wars.values():
|
||||
for camp in war.campaigns:
|
||||
|
|
@ -318,6 +336,7 @@ class Model:
|
|||
war_part = war.get_war_participant(participant_id)
|
||||
return self.players[war_part.player_id].name
|
||||
|
||||
# TODO replace multiloops by internal has_* method
|
||||
def get_campaign_participant(self, participant_id: str) -> CampaignParticipant:
|
||||
for war in self.wars.values():
|
||||
for camp in war.campaigns:
|
||||
|
|
@ -352,6 +371,7 @@ class Model:
|
|||
war = self.get_war_by_campaign(campaign_id)
|
||||
return war.add_round(campaign_id)
|
||||
|
||||
# TODO replace multiloops by internal has_* method
|
||||
def get_round(self, round_id: str) -> Round:
|
||||
for war in self.wars.values():
|
||||
for camp in war.campaigns:
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue