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
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
|
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
# Copyright (C) 2018
# Matthias P. Braendli, matthias.braendli@mpb.li
#
# http://www.opendigitalradio.org
#
# This file is part of ODR-DabMod.
#
# ODR-DabMod is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# ODR-DabMod is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with ODR-DabMod. If not, see <http://www.gnu.org/licenses/>.
import configuration
import os.path
import cherrypy
import argparse
from jinja2 import Environment, FileSystemLoader
from api import API
import zmqrc
env = Environment(loader=FileSystemLoader('templates'))
class Root:
def __init__(self, config_file):
self.config_file = config_file
self.conf = configuration.Configuration(self.config_file)
self.mod_rc = zmqrc.ModRemoteControl("localhost")
self.api = API(self.mod_rc)
@cherrypy.expose
def index(self):
raise cherrypy.HTTPRedirect('/home')
@cherrypy.expose
def about(self):
tmpl = env.get_template("about.html")
js = []
return tmpl.render(tab='about', js=js, is_login=False)
@cherrypy.expose
def home(self):
tmpl = env.get_template("home.html")
js = []
return tmpl.render(tab='home', js=js, is_login=False)
@cherrypy.expose
def rcvalues(self):
tmpl = env.get_template("rcvalues.html")
js = ["js/odr-rcvalues.js"]
return tmpl.render(tab='rcvalues', js=js, is_login=False)
@cherrypy.expose
def modulator(self):
tmpl = env.get_template("modulator.html")
js = ["js/odr-modulator.js"]
return tmpl.render(tab='modulator', js=js, is_login=False)
if __name__ == '__main__':
parser = argparse.ArgumentParser(description='ODR-DabMod Web GUI')
parser.add_argument('-c', '--config',
default="ui-config.json",
help='configuration filename')
cli_args = parser.parse_args()
config = configuration.Configuration(cli_args.config)
if config.config is None:
print("Configuration file is missing or is not readable - {}".format(cli_args.config))
sys.exit(1)
if config.config['global']['daemon']:
cherrypy.process.plugins.Daemonizer(cherrypy.engine).subscribe()
accesslog = os.path.realpath(os.path.join(config.config['global']['logs_directory'], 'access.log'))
errorlog = os.path.realpath(os.path.join(config.config['global']['logs_directory'], 'error.log'))
cherrypy.config.update({
'server.socket_host': config.config['global']['host'],
'server.socket_port': int(config.config['global']['port']),
'request.show_tracebacks' : True,
'environment': 'production',
'tools.sessions.on': False,
'tools.encode.on': True,
'tools.encode.encoding': "utf-8",
'log.access_file': accesslog,
'log.error_file': errorlog,
'log.screen': True,
})
staticdir = os.path.realpath(config.config['global']['static_directory'])
cherrypy.tree.mount(
Root(cli_args.config), config={
'/': { },
'/css': {
'tools.staticdir.on': True,
'tools.staticdir.dir': os.path.join(staticdir, u"css/")
},
'/js': {
'tools.staticdir.on': True,
'tools.staticdir.dir': os.path.join(staticdir, u"js/")
},
'/fonts': {
'tools.staticdir.on': True,
'tools.staticdir.dir': os.path.join(staticdir, u"fonts/")
},
'/favicon.ico': {
'tools.staticfile.on': True,
'tools.staticfile.filename': os.path.join(staticdir, u"fonts/favicon.ico")
},
}
)
cherrypy.engine.start()
cherrypy.engine.block()
|