From 7dd46dd72bf611b35bc134d51c7f3627d6dee760 Mon Sep 17 00:00:00 2001 From: Daniel Dolezal Date: Sun, 5 May 2024 22:12:14 +0200 Subject: [PATCH] add env argument for StorageLoader to load correct module and use it when store game history is enabled --- main.py | 1 + server/Server.py | 7 ++++--- statestorage/StorageLoader.py | 7 +++++++ 3 files changed, 12 insertions(+), 3 deletions(-) create mode 100644 statestorage/StorageLoader.py diff --git a/main.py b/main.py index 56f6bec..c50d192 100755 --- a/main.py +++ b/main.py @@ -25,6 +25,7 @@ if __name__ == "__main__": server = Server( data_path=os.path.dirname(__file__), snake_type=os.environ.get("SNAKE", "TemplateSnake"), + storage_type=os.environ.get("STORAGE", "LocalStorage"), store_game_when_win_and_moves_are_bigger_as=int(os.environ.get("STORE_IF_WIN_AND_MOVES_ARE_BIGGER_AS", 10)), debug=os.environ.get("DEBUG_SERVER", False) ) diff --git a/server/Server.py b/server/Server.py index 0f4ee9b..134ae38 100644 --- a/server/Server.py +++ b/server/Server.py @@ -2,7 +2,7 @@ from server.Files import read_file from server.GameBoard import GameBoard from server.SnakeBuilder import SnakeBuilder -from statestorage.LocalStorage import LocalStorage +from statestorage.StorageLoader import StorageLoader from flask import Flask from flask import request @@ -11,9 +11,10 @@ import logging, json, os, re class Server: default_snake_config = {"apiversion":"1","author":"","color":"#888888","head":"default","tail":"default"} - def __init__(self, data_path:str, snake_type:str, debug:bool=False, store_game_when_win_and_moves_are_bigger_as:int=10): + def __init__(self, data_path:str, snake_type:str, storage_type:str, debug:bool=False, store_game_when_win_and_moves_are_bigger_as:int=10): self.debug = debug self.snake_type = snake_type + self.storage_type = storage_type self.config_file = os.path.join(data_path, 'data', 'snake-config.json') self.data_path = data_path @@ -135,7 +136,7 @@ class Server: game_board = self._get_game_board(game_state, end=True) if not game_board.get_winner() == "me" and not game_board.get_turn() <= self.store_game_when_win_and_moves_are_bigger_as: game_board.save( - LocalStorage, + StorageLoader.build(self.storage_type), file_path=os.path.join(self.data_path, 'data'), ) diff --git a/statestorage/StorageLoader.py b/statestorage/StorageLoader.py new file mode 100644 index 0000000..20b4c3b --- /dev/null +++ b/statestorage/StorageLoader.py @@ -0,0 +1,7 @@ + +class StorageLoader: + @classmethod + def build(self, selected_storage:str): + storage_module = __import__(f'statestorage.{selected_storage}', fromlist=[selected_storage]) + storage_class = getattr(storage_module, selected_storage) + return storage_class