diff options
Diffstat (limited to 'swiftstory')
-rw-r--r-- | swiftstory/client.py | 2 | ||||
-rw-r--r-- | swiftstory/game_manager.py | 17 |
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) |