mostly working templating for landing page
This commit is contained in:
63
web.py
63
web.py
@@ -1,35 +1,71 @@
|
||||
from db_connect import DatabaseConnect
|
||||
|
||||
from flask import Flask, abort, session
|
||||
from jinja2 import Template
|
||||
from jinja2 import FileSystemLoader, Template
|
||||
import plotly.express as px
|
||||
from plotly.subplots import make_subplots
|
||||
import plotly.graph_objects as go
|
||||
|
||||
import logging
|
||||
from os import sep
|
||||
import datetime
|
||||
|
||||
import templating
|
||||
|
||||
app = Flask(__name__)
|
||||
db = DatabaseConnect()
|
||||
|
||||
Flask.jinja_options["loader"] = FileSystemLoader("web")
|
||||
env = app.create_jinja_environment()
|
||||
|
||||
DISPLAYEDTYPES = 2
|
||||
TDLATE = datetime.timedelta(hours=8)
|
||||
|
||||
# before and after
|
||||
TYPEUNITS = [
|
||||
"°C",
|
||||
"%"
|
||||
]
|
||||
|
||||
@app.route("/")
|
||||
def index():
|
||||
avail_rooms = db.view_valid_rooms(1)
|
||||
outtext = "<h1>Available rooms</h1><ul>"
|
||||
if len(avail_rooms) == 0:
|
||||
outtext += "<li>You have no rooms you can view</li>"
|
||||
else:
|
||||
for room in avail_rooms:
|
||||
outtext += f"<li><a href=/room/{room[1]}>{room[0]}</li>"
|
||||
outtext += "</ul>"
|
||||
return outtext
|
||||
# no user handling yet so we get user of ID 1 (not logged in)
|
||||
active_user = 1
|
||||
#populate userinfo
|
||||
user_info = templating.UserInfo(id=active_user, name=db.username_from_id(active_user)[0])
|
||||
|
||||
rooms_info = []
|
||||
for room in db.view_valid_rooms(active_user):
|
||||
sensor_info = []
|
||||
sensors_avail = db.get_sensors_in_room_id(room[2])
|
||||
for i in range(DISPLAYEDTYPES):
|
||||
sensors_with_type = [x for x in sensors_avail if x[1] == i]
|
||||
# TODO: handle more than one sensor in one room
|
||||
if sensors_with_type:
|
||||
reading = db.get_sensorsinfo_by_sensorid(sensors_with_type[0][0])
|
||||
if reading is None:
|
||||
sensor_info.append(templating.SensorInfo(2,None, None, ""))
|
||||
continue
|
||||
reading = templating.SensorInfo(1 if reading.timestamp + TDLATE < datetime.datetime.now() else 0,
|
||||
reading.type,
|
||||
reading.timestamp,
|
||||
f"{reading.reading}{TYPEUNITS[i]}")
|
||||
sensor_info.append(reading)
|
||||
else:
|
||||
sensor_info.append(templating.SensorInfo(2,None, None, ""))
|
||||
rooms_info.append(templating.RoomInfo(room[0], room[1], sensor_info))
|
||||
|
||||
out_html = templating.LandingPage(env, user_info,rooms_info)
|
||||
return out_html.render()
|
||||
|
||||
|
||||
|
||||
@app.route('/room/<room_name>')
|
||||
def room_page(room_name=None):
|
||||
if not db.user_has_room_perms(1,room_name):
|
||||
abort(403)
|
||||
|
||||
sensor_list = db.get_sensors_in_room(room_name)
|
||||
sensor_list = db.get_sensors_in_room_shortname(room_name)
|
||||
fig = make_subplots(rows=1, cols=len(sensor_list))
|
||||
for idx, sensorID in enumerate(sensor_list):
|
||||
lst = [x for x in db.get_sensor_data(sensorID)]
|
||||
@@ -47,4 +83,7 @@ def room_page(room_name=None):
|
||||
px_jinja_data = {"fig":fig.to_html(full_html=False)}
|
||||
with open(template_path,'r') as template_file:
|
||||
j2_template = Template(template_file.read())
|
||||
return j2_template.render(px_jinja_data)
|
||||
return j2_template.render(px_jinja_data)
|
||||
|
||||
if __name__ == "__main__":
|
||||
app.run(debug=True)
|
||||
Reference in New Issue
Block a user