aegis_gui.guisettings.GuiSettings

 1import yaml
 2import pathlib
 3from typing import Optional
 4
 5
 6class GuiSettings:
 7    ENVIRONMENT: str
 8    DEBUG_MODE: bool
 9    # loglevel: str
10    SIMULATION_NUMBER_LIMIT: Optional[int]
11    # can_delete_default_sim: bool
12    # default_selection_states: tuple
13    DATA_RETENTION_DAYS: Optional[int]
14    ABS_PATH_TO_BASE_DIRECTORY: Optional[str]
15    PORT: Optional[int]
16    BASE_HREF = "/aegis/"
17
18    def can_run_more_simulations(self, currently_running):
19        if self.SIMULATION_NUMBER_LIMIT is None:
20            return True
21        else:
22            return self.SIMULATION_NUMBER_LIMIT > currently_running
23
24    def get_base_dir(self):
25        if self.ABS_PATH_TO_BASE_DIRECTORY is None:
26            return pathlib.Path.home().absolute()
27        else:
28            return pathlib.Path(self.ABS_PATH_TO_BASE_DIRECTORY).absolute()
29
30    def set(self, environment: str, debug):
31
32        # Read from YML
33        path_to_yaml = pathlib.Path(__file__).parent / "gui_settings.yml"
34        with open(path_to_yaml, "r") as file:
35            yml = yaml.safe_load(file)
36        if environment == "local":
37            yml = yml["LocalConfig"]
38        elif environment == "server":
39            yml = yml["ServerConfig"]
40        else:
41            raise ValueError(f"{environment} is an invalid input for environment; should be 'local' or 'server'")
42
43        assert isinstance(debug, bool)
44
45        self.ENVIRONMENT = yml["ENVIRONMENT"]
46        self.DEBUG_MODE = debug
47        self.SIMULATION_NUMBER_LIMIT = yml["SIMULATION_NUMBER_LIMIT"]
48        self.DATA_RETENTION_DAYS = yml["DATA_RETENTION_DAYS"]
49        self.MAX_SIM_NAME_LENGTH = yml["MAX_SIM_NAME_LENGTH"]
50        self.ABS_PATH_TO_BASE_DIRECTORY = yml["ABS_PATH_TO_BASE_DIRECTORY"]
51        self.PORT = yml["PORT"]
52
53        # Derived
54        self.base_dir = self.get_base_dir() / "aegis_data"
55        self.sim_dir = self.base_dir / "sim_data"
56        self.figure_dir = self.base_dir / "figures"
57
58        self.base_dir.mkdir(exist_ok=True, parents=True)
59        self.sim_dir.mkdir(exist_ok=True, parents=True)
60        self.figure_dir.mkdir(exist_ok=True, parents=True)
61
62    def wrap_href(self, href):
63        return self.BASE_HREF + href
64
65
66gui_settings = GuiSettings()
67
68# def create_config_class(name, attrs):
69#     """Dynamically create a configuration class."""
70#     return type(name, (BaseConfig,), attrs)
71
72
73# def load_configs_from_yaml(file_path):
74
75#     config_classes = {}
76
77#     for config_name, config_attrs in configs.items():
78#         config_class = create_config_class(config_name, config_attrs)
79#         config_classes[config_name] = config_class
80
81#     return config_classes
82
83
84# LocalConfig = config_classes["LocalConfig"]
85# ServerConfig = config_classes["ServerConfig"]
class GuiSettings:
 7class GuiSettings:
 8    ENVIRONMENT: str
 9    DEBUG_MODE: bool
10    # loglevel: str
11    SIMULATION_NUMBER_LIMIT: Optional[int]
12    # can_delete_default_sim: bool
13    # default_selection_states: tuple
14    DATA_RETENTION_DAYS: Optional[int]
15    ABS_PATH_TO_BASE_DIRECTORY: Optional[str]
16    PORT: Optional[int]
17    BASE_HREF = "/aegis/"
18
19    def can_run_more_simulations(self, currently_running):
20        if self.SIMULATION_NUMBER_LIMIT is None:
21            return True
22        else:
23            return self.SIMULATION_NUMBER_LIMIT > currently_running
24
25    def get_base_dir(self):
26        if self.ABS_PATH_TO_BASE_DIRECTORY is None:
27            return pathlib.Path.home().absolute()
28        else:
29            return pathlib.Path(self.ABS_PATH_TO_BASE_DIRECTORY).absolute()
30
31    def set(self, environment: str, debug):
32
33        # Read from YML
34        path_to_yaml = pathlib.Path(__file__).parent / "gui_settings.yml"
35        with open(path_to_yaml, "r") as file:
36            yml = yaml.safe_load(file)
37        if environment == "local":
38            yml = yml["LocalConfig"]
39        elif environment == "server":
40            yml = yml["ServerConfig"]
41        else:
42            raise ValueError(f"{environment} is an invalid input for environment; should be 'local' or 'server'")
43
44        assert isinstance(debug, bool)
45
46        self.ENVIRONMENT = yml["ENVIRONMENT"]
47        self.DEBUG_MODE = debug
48        self.SIMULATION_NUMBER_LIMIT = yml["SIMULATION_NUMBER_LIMIT"]
49        self.DATA_RETENTION_DAYS = yml["DATA_RETENTION_DAYS"]
50        self.MAX_SIM_NAME_LENGTH = yml["MAX_SIM_NAME_LENGTH"]
51        self.ABS_PATH_TO_BASE_DIRECTORY = yml["ABS_PATH_TO_BASE_DIRECTORY"]
52        self.PORT = yml["PORT"]
53
54        # Derived
55        self.base_dir = self.get_base_dir() / "aegis_data"
56        self.sim_dir = self.base_dir / "sim_data"
57        self.figure_dir = self.base_dir / "figures"
58
59        self.base_dir.mkdir(exist_ok=True, parents=True)
60        self.sim_dir.mkdir(exist_ok=True, parents=True)
61        self.figure_dir.mkdir(exist_ok=True, parents=True)
62
63    def wrap_href(self, href):
64        return self.BASE_HREF + href
ENVIRONMENT: str
DEBUG_MODE: bool
SIMULATION_NUMBER_LIMIT: Optional[int]
DATA_RETENTION_DAYS: Optional[int]
ABS_PATH_TO_BASE_DIRECTORY: Optional[str]
PORT: Optional[int]
BASE_HREF = '/aegis/'
def can_run_more_simulations(self, currently_running):
19    def can_run_more_simulations(self, currently_running):
20        if self.SIMULATION_NUMBER_LIMIT is None:
21            return True
22        else:
23            return self.SIMULATION_NUMBER_LIMIT > currently_running
def get_base_dir(self):
25    def get_base_dir(self):
26        if self.ABS_PATH_TO_BASE_DIRECTORY is None:
27            return pathlib.Path.home().absolute()
28        else:
29            return pathlib.Path(self.ABS_PATH_TO_BASE_DIRECTORY).absolute()
def set(self, environment: str, debug):
31    def set(self, environment: str, debug):
32
33        # Read from YML
34        path_to_yaml = pathlib.Path(__file__).parent / "gui_settings.yml"
35        with open(path_to_yaml, "r") as file:
36            yml = yaml.safe_load(file)
37        if environment == "local":
38            yml = yml["LocalConfig"]
39        elif environment == "server":
40            yml = yml["ServerConfig"]
41        else:
42            raise ValueError(f"{environment} is an invalid input for environment; should be 'local' or 'server'")
43
44        assert isinstance(debug, bool)
45
46        self.ENVIRONMENT = yml["ENVIRONMENT"]
47        self.DEBUG_MODE = debug
48        self.SIMULATION_NUMBER_LIMIT = yml["SIMULATION_NUMBER_LIMIT"]
49        self.DATA_RETENTION_DAYS = yml["DATA_RETENTION_DAYS"]
50        self.MAX_SIM_NAME_LENGTH = yml["MAX_SIM_NAME_LENGTH"]
51        self.ABS_PATH_TO_BASE_DIRECTORY = yml["ABS_PATH_TO_BASE_DIRECTORY"]
52        self.PORT = yml["PORT"]
53
54        # Derived
55        self.base_dir = self.get_base_dir() / "aegis_data"
56        self.sim_dir = self.base_dir / "sim_data"
57        self.figure_dir = self.base_dir / "figures"
58
59        self.base_dir.mkdir(exist_ok=True, parents=True)
60        self.sim_dir.mkdir(exist_ok=True, parents=True)
61        self.figure_dir.mkdir(exist_ok=True, parents=True)
def wrap_href(self, href):
63    def wrap_href(self, href):
64        return self.BASE_HREF + href
gui_settings = <GuiSettings object>