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()
|