summaryrefslogtreecommitdiff
path: root/swiftstory/game_manager.py
diff options
context:
space:
mode:
authorOlivier Gayot <olivier.gayot@sigexec.com>2021-12-23 17:09:15 +0100
committerOlivier Gayot <olivier.gayot@sigexec.com>2021-12-23 23:15:21 +0100
commit041f3e63118837acaa2316139dd9ca6c796a79e6 (patch)
tree28d26369b838bdc40306319565198ccd0ebdb33e /swiftstory/game_manager.py
parente6b9b68a6539d74bec94c0a361187ed89ec5c124 (diff)
Refactor GameManager and add control over game creation
GameManager had a method called join_game ; which was not actually doing any joining. Instead, it was just returning a reference to the game that would match the specified game name and language. In case the game would not exist, it would be created before being returned. The function is now renamed find_by_name. Also a new parameter "create" has been added. It is a boolean that controls whether a game would be created if it does not exist. Signed-off-by: Olivier Gayot <olivier.gayot@sigexec.com>
Diffstat (limited to 'swiftstory/game_manager.py')
-rw-r--r--swiftstory/game_manager.py17
1 files changed, 16 insertions, 1 deletions
diff --git a/swiftstory/game_manager.py b/swiftstory/game_manager.py
index da2e5c7..6c2da1f 100644
--- a/swiftstory/game_manager.py
+++ b/swiftstory/game_manager.py
@@ -8,6 +8,15 @@ from swiftstory.game import Game
from swiftstory.cards import Cards
+class NoSuchGameError(Exception):
+ """ Exception to be raised when no game is found matching the criterias.
+ """
+ def __init__(self, message: str = "", game_name: str = "", lang: str = "") -> None:
+ self.game_name = game_name
+ self.lang = lang
+ super().__init__(message)
+
+
@dataclass
class LangContainer:
""" Container for game ojects in a given language. """
@@ -32,7 +41,10 @@ class GameManager:
""" List available languages based on FS. """
return next(os.walk("usr/share/swiftstory/lang"))[1]
- def join_game(self, game_name: str, lang: str) -> Game:
+ def find_by_name(self, game_name: str, lang: str, create=True) -> Game:
+ """ Find and return the game that matches the name and language
+ specified. If the game does not exist but create is set to True, a new
+ game will be created. """
container = self.lang_containers.get(lang)
if container is None:
raise UnsupportedLanguage(lang)
@@ -43,6 +55,9 @@ class GameManager:
game = games.get(game_name)
+ if game is None and not create:
+ raise NoSuchGameError(game_name=game_name, lang=lang)
+
if game is None:
logging.info("Starting new game: %s (lang: %s)", game_name, lang)