haldis/app/views/general.py

151 lines
4.9 KiB
Python
Raw Normal View History

2019-09-10 00:50:22 +00:00
"Script to generate the general views of Haldis"
import os
from datetime import datetime, timedelta
from flask import Flask, render_template, make_response
from flask import request
from flask import Blueprint, abort
from flask import current_app as app
from flask import send_from_directory, url_for
from flask_login import login_required
import yaml
from models import Location, Order
# import views
from views.order import get_orders
2019-09-05 01:33:29 +00:00
general_bp = Blueprint("general_bp", __name__)
2019-09-05 01:33:29 +00:00
@general_bp.route("/")
2019-09-07 23:34:16 +00:00
def home() -> str:
2019-09-10 00:50:22 +00:00
"Generate the home view"
prev_day = datetime.now() - timedelta(days=1)
recently_closed = get_orders(
2019-09-05 01:33:29 +00:00
((Order.stoptime > prev_day) & (Order.stoptime < datetime.now()))
)
return render_template(
"home.html", orders=get_orders(), recently_closed=recently_closed
)
@general_bp.route("/css")
def css():
"Generate the css"
2019-12-05 18:39:35 +00:00
if (request.cookies.get('performance') and request.cookies.get('performance') == 'highPerformance'):
cssPath = 'app/static/css/themes/highPerformance/'
else:
cssPath = 'app/static/css/themes/lowPerformance/'
if request.cookies.get('theme'):
if request.cookies['theme'] == 'customTheme':
#TODO: The custom theme is hardcoded :(. Make the server auto select a custom team.
# Here seasonal themes will be returned; matching the current date.
# Open the YAML file with all the themes.
with open('app/views/themes.yml', 'r') as stream:
data = yaml.safe_load(stream)
# Build a dictionary from the YAML file with all the themes and there attributes.
themes = {}
for item in data:
key = list(item.keys())[0]
themes[key] = item[key]
2019-12-05 19:38:07 +00:00
# Get the current date.
current_day = datetime.now().day
current_month = datetime.now().month
# Check each theme in the dictionary and return the first one that is "correct"
for theme in themes.values():
if theme['type'] == 'static-date':
2019-12-05 19:38:07 +00:00
start_day, start_month = theme['start'].split('/')
start_day = int(start_day)
start_month = int(start_month)
end_day, end_month = theme['end'].split('/')
end_day = int(end_day)
end_month = int(end_month)
if end_month < start_month:
# Hacky (werkt nu maar kan beter)
end_month += 12
if theme['type'] == 'static-date':
if (((start_month == current_month) and
(start_day <= current_day)) or
(start_month <= current_month)):
if (((end_month == current_month) and
(end_day >= current_day)) or
(end_month > current_month)):
f = open(cssPath+theme['file'])
break
else:
2019-12-05 18:39:35 +00:00
try:
f = open(cssPath+request.cookies['theme']+".css")
except IOError:
f = open(cssPath+"lightmode.css")
else:
2019-12-05 18:39:35 +00:00
f = open(cssPath+"lightmode.css")
response = make_response(f.read())
response.headers['Content-Type'] = 'text/css'
f.close()
return response
2019-09-10 00:50:22 +00:00
@general_bp.route("/map")
def map_view() -> str:
"Generate the map view"
2019-09-05 01:33:29 +00:00
locs = Location.query.order_by("name")
return render_template("maps.html", locations=locs)
2019-09-05 01:33:29 +00:00
@general_bp.route("/location")
2019-09-07 23:34:16 +00:00
def locations() -> str:
2019-09-10 00:50:22 +00:00
"Generate the location view"
2019-09-05 01:33:29 +00:00
locs = Location.query.order_by("name")
return render_template("locations.html", locations=locs)
2019-09-10 00:50:22 +00:00
@general_bp.route("/location/<int:location_id>")
def location(location_id) -> str:
"Generate the location view given an id"
loc = Location.query.filter(Location.id == location_id).first()
if loc is None:
abort(404)
2019-09-05 01:33:29 +00:00
return render_template("location.html", location=loc, title=loc.name)
2019-09-05 01:33:29 +00:00
@general_bp.route("/about/")
2019-09-07 23:34:16 +00:00
def about() -> str:
2019-09-10 00:50:22 +00:00
"Generate the about view"
2019-09-05 01:33:29 +00:00
return render_template("about.html")
2019-09-05 01:33:29 +00:00
@general_bp.route("/profile/")
@login_required
2019-09-07 23:34:16 +00:00
def profile() -> str:
2019-09-10 00:50:22 +00:00
"Generate the profile view"
2019-09-05 01:33:29 +00:00
return render_template("profile.html")
2019-09-05 01:33:29 +00:00
@general_bp.route("/favicon.ico")
2019-09-07 23:34:16 +00:00
def favicon() -> str:
2019-09-10 00:50:22 +00:00
"Generate the favicon"
# pylint: disable=R1705
if not get_orders((Order.stoptime > datetime.now())):
2019-09-05 01:33:29 +00:00
return send_from_directory(
2019-09-07 23:34:16 +00:00
os.path.join(str(app.root_path), "static"),
2019-09-05 01:33:29 +00:00
"favicon.ico",
mimetype="image/x-icon",
)
else:
2019-09-05 01:33:29 +00:00
return send_from_directory(
2019-09-07 23:34:16 +00:00
os.path.join(str(app.root_path), "static"),
2019-09-05 01:33:29 +00:00
"favicon_orange.ico",
mimetype="image/x-icon",
)