summaryrefslogtreecommitdiff
path: root/server/environment.py
blob: a109ea0853d43548d6bae74d9e9109c7dfb69534 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
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)