summaryrefslogtreecommitdiff
path: root/swiftstory
diff options
context:
space:
mode:
Diffstat (limited to 'swiftstory')
-rw-r--r--swiftstory/client.py2
-rw-r--r--swiftstory/game_manager.py17
2 files changed, 17 insertions, 2 deletions
diff --git a/swiftstory/client.py b/swiftstory/client.py
index c3a2aff..437a3f9 100644
--- a/swiftstory/client.py
+++ b/swiftstory/client.py
@@ -24,7 +24,7 @@ class Client:
lang = 'en'
try:
- game = self.game_manager.join_game(game_name, lang)
+ game = self.game_manager.find_by_name(game_name, lang)
except UnsupportedLanguage as e:
raise JoinError(f"unsupported language: {str(e)}") from e
# XXX self.game will be assigned by game.try_join()
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)