diff options
author | AL-LCL <alvin@alvinhavel.com> | 2023-05-19 10:39:49 +0200 |
---|---|---|
committer | AL-LCL <alvin@alvinhavel.com> | 2023-05-19 10:39:49 +0200 |
commit | 58ebd3bc0f00c532e97e9a5571471ffab87934ba (patch) | |
tree | 6e099e59af07206df6edf2b0c585d0c5a466d4bd /server/environment.py |
Diffstat (limited to 'server/environment.py')
-rw-r--r-- | server/environment.py | 81 |
1 files changed, 81 insertions, 0 deletions
diff --git a/server/environment.py b/server/environment.py new file mode 100644 index 0000000..a109ea0 --- /dev/null +++ b/server/environment.py @@ -0,0 +1,81 @@ +''' + A utility class to manage the environment + variables & interact with the database. + + Verified: 2021 February 7 + * Follows PEP8 + * Tested Platforms + * Windows 10 +''' + +from server.database import Database +from server.settings import Settings +from server.error import ServerError +from server.console import Console +from shared.state import Static + + +class Environment: + + def __init__(self, ret): + self.__ret = ret + + self.__db = Database() + self.__db.create_table(Settings.TABLE_NAME, + **Settings.TABLE_KWARGS) + self.__db.commit() + + self.__environment = self.__db.read( + Settings.TABLE_NAME, fetch=1) + + if not self.__environment: + self.__db.write(Settings.TABLE_NAME, + Settings.DEFAULT) + self.__db.commit() + self.__environment = (Settings.DEFAULT,) + + @ServerError.quiet + def __del__(self): + self.__db.close() + + def set(self, variable, value): + lower_variable = variable.lower() + + if lower_variable in Settings.TABLE_KWARGS: + upper_variable = variable.upper() + old_value = getattr(Settings, upper_variable) + + if type(old_value) is int: + lower_value = value.lower() + + if lower_value == 'true': + value = 1 + elif lower_value == 'false': + value = 0 + else: + raise ValueError('Bool Required') + else: + value = value.strip() + + self.__db.update(Settings.TABLE_NAME, + (lower_variable, '=', old_value), + **{lower_variable: value}) + self.__db.commit() + setattr(Settings, upper_variable, value) + + return Console.printf('Environment variable set', + Static.SUCCESS, ret=self.__ret) + else: + return Console.printf('Environment variable does not exist', + Static.WARNING, ret=self.__ret) + + @staticmethod + def list(ret): + headers, values = ('Variable', 'Value'), [] + + for key, value in zip(Settings.EVENIORMENT_VARIABLES, + Settings.environment()): + values.append((key, (bool(value) if type(value) + is int else value))) + + return Console.tabulate(values, headers, ret) |