summaryrefslogtreecommitdiff
path: root/server/environment.py
diff options
context:
space:
mode:
Diffstat (limited to 'server/environment.py')
-rw-r--r--server/environment.py81
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)