summaryrefslogtreecommitdiff
path: root/manage.py
blob: 6df99021ff62229cf5327472be032994ab1cab53 (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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
#!/usr/bin/python3
# vim: tabstop=4 softtabstop=4 shiftwidth=4 expandtab


import sys
import os
import subprocess
import json
import jinja2


SETTINGS_PATH = "settings.json"
SYSTEMD_TEMPLATE = "systemd/webtemplate.service.jinja2"
FLASK_TEMPLATE = "flask/main.py.jinja2"
REPOSITORY_WEBROOT = "webroot"


def read_settings():
    """Read the SETTINGS_PATH File and return a Dictionary with its Content"""

    with open(SETTINGS_PATH, "r") as settings:
        settings = settings.read()

    settings = json.loads(settings)
    return settings


def build_systemd_files(settings):
    """Generate all Systemd Unit Files with Settings from SETTINGS_PATH"""

    with open(SYSTEMD_TEMPLATE, "r") as template:
        template = template.read()

    template = jinja2.Template(template)
    systemd_file = template.render(settings)

    file_path = "systemd/build/{}.service".format(settings["project_name"])

    with open(file_path, "w") as _file:
        _file.write(systemd_file)


def build_flask_files(settings):
    """Generate all Python Flask Files with Settings from SETTINGS_PATH"""

    if settings["web_framework"] == "flask":
        with open(FLASK_TEMPLATE, "r") as template:
            template = template.read()
    
        template = jinja2.Template(template)
        flask_file = template.render(settings)
    
        file_path = "flask/build/{}".format(settings["project_name"])
    
        with open(file_path, "w") as _file:
            _file.write(flask_file)
    else:
        print("Flask not enabled in settings.json - skipping file generation for Flask")


def install_webroot(settings):
    """Install every File from the Repositories Webroot to the Systems Webroot"""

    for directory, subdirs, files in os.walk(REPOSITORY_WEBROOT, topdown=False):
        for _file in files:
            path_to_file = os.path.join(directory, _file)
            relative_path = os.path.relpath(path_to_file, REPOSITORY_WEBROOT)
            target_path = os.path.join(settings["webroot_installation_path"], relative_path)
            subprocess.run("install -Dm 644 {} {}".format(path_to_file, target_path), shell=True)


def uninstall_webroot(settings):
    """Uninstalls every File from the Systems Webroot"""

    path_to_delete = os.path.join(settings["webroot_installation_path"], "*")
    subprocess.run("rm -rf {}".format(path_to_delete), shell=True)


def main():
    """The main Function"""

    settings = read_settings()  # get settings from SETTINGS_PATH

    # just one argument is allowed:
    if len(sys.argv) != 2:
        print("Provide exactly one parameter")
        sys.exit(1)

    # execute given command
    command = sys.argv[1]
    if command == "build_systemd_files":
        build_systemd_files(settings)
    elif command == "build_flask_files":
        build_flask_files(settings)
    elif command == "install_webroot":
        install_webroot(settings)
    elif command == "uninstall_webroot":
        uninstall_webroot(settings)
    else:
        print("Unknown command")
        exit(1)


if __name__ == "__main__":
    main()