From cc07b3fdc4b8860a1ee1b25f09039ba3f13ee509 Mon Sep 17 00:00:00 2001 From: Jan Tuomi Date: Tue, 11 Feb 2025 00:25:57 +0200 Subject: Add initial browser UI app --- browser/app.py | 69 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 browser/app.py (limited to 'browser/app.py') diff --git a/browser/app.py b/browser/app.py new file mode 100644 index 0000000..1398e93 --- /dev/null +++ b/browser/app.py @@ -0,0 +1,69 @@ +from dotenv import load_dotenv +load_dotenv() + +import os +import sys +import traceback +import tempfile +from flask import Flask, render_template +from flask_compress import Compress # type: ignore + +from log_db import DB, Bound + +app = Flask(__name__) +Compress(app) + +BASE_URL = os.environ["BASE_URL"] +DB_DIR = os.environ["DB_DIR"] if "DB_DIR" in os.environ else tempfile.TemporaryDirectory().name + +print("""\n""" + f"""BASE_URL: {BASE_URL}\n""" + f"""DB_DIR: {DB_DIR}\n""") + +db = DB \ + .configure() \ + .data_dir(DB_DIR) \ + .fields(["id", "name"]) \ + .primary_key("id") \ + .secondary_keys(["name"]) \ + .initialize() + +def error_page(message: str, code: int = 400): + return render_template("error.html.j2", error = message), code + +@app.errorhandler(404) +def not_found(e: Exception): + return error_page("Not found", 404) + +@app.errorhandler(405) +def method_not_allowed(e: Exception): + return error_page(str(e), 405) + +@app.errorhandler(Exception) +def error_handler(e: Exception): + traceback.print_exception(e, file=sys.stderr) + return error_page("Internal server error", 500) + +@app.get("/") +def index(): + return page_find() + +@app.get("/find") +def page_find(): + rows = db.range_by("id", Bound.unbounded(), Bound.unbounded(), limit=100) + + return render_template('index.html.j2', + selected_form = "form_find.html.j2", + field_names = ["id", "name"], + rows = rows, + ) + +@app.get("/range") +def page_range(): + rows = db.range_by("id", Bound.unbounded(), Bound.unbounded(), limit=100) + + return render_template('index.html.j2', + selected_form = "form_range.html.j2", + field_names = ["id", "name"], + rows = rows, + ) -- cgit v1.3