#!/usr/bin/python3 """Web page to show upcoming events.""" import inspect import sys import traceback from datetime import datetime import flask import werkzeug import werkzeug.debug.tbtools import agenda.data app = flask.Flask(__name__) app.debug = False @app.errorhandler(werkzeug.exceptions.InternalServerError) def exception_handler(e: werkzeug.exceptions.InternalServerError) -> tuple[str, int]: """Handle exception.""" exec_type, exc_value, current_traceback = sys.exc_info() assert exc_value tb = werkzeug.debug.tbtools.DebugTraceback(exc_value) summary = tb.render_traceback_html(include_title=False) exc_lines = "".join(tb._te.format_exception_only()) last_frame = list(traceback.walk_tb(current_traceback))[-1][0] last_frame_args = inspect.getargs(last_frame.f_code) return ( flask.render_template( "show_error.html", plaintext=tb.render_traceback_text(), exception=exc_lines, exception_type=tb._te.exc_type.__name__, summary=summary, last_frame=last_frame, last_frame_args=last_frame_args, ), 500, ) @app.route("/") async def index() -> str: """Index page.""" now = datetime.now() data = await agenda.data.get_data(now) return flask.render_template("index.html", today=now.date(), **data) if __name__ == "__main__": app.run(host="0.0.0.0")