From 699ee50229ebf9463fe306b285dffa02097ed781 Mon Sep 17 00:00:00 2001 From: Peter Stockings Date: Sun, 16 Feb 2025 13:45:34 +1100 Subject: [PATCH] Add blueprint scaffold for timer functions --- app.py | 8 +- db.py | 2 +- extensions.py | 17 +++ routes/timer.py | 17 +++ templates/dashboard.html | 8 +- .../dashboard/timer_functions/overview.html | 119 ++++++++++++++++++ 6 files changed, 162 insertions(+), 9 deletions(-) create mode 100644 extensions.py create mode 100644 routes/timer.py create mode 100644 templates/dashboard/timer_functions/overview.html diff --git a/app.py b/app.py index faa7116..ac90b7c 100644 --- a/app.py +++ b/app.py @@ -3,14 +3,14 @@ import os from flask import Flask, Response, jsonify, redirect, render_template, render_template_string, request, url_for import jinja_partials from jinja2_fragments import render_block -from flask_htmx import HTMX import requests -from db import DataBase +from extensions import db, htmx, init_app from services import create_http_function_view_model, create_http_functions_view_model from flask_login import LoginManager, UserMixin, current_user, login_required, login_user, logout_user from werkzeug.security import check_password_hash, generate_password_hash import os from dotenv import load_dotenv +from routes.timer import timer # Load environment variables from .env file in non-production environments if os.environ.get('FLASK_ENV') != 'production': @@ -23,8 +23,8 @@ app.secret_key = os.environ.get('SECRET_KEY', '2a661781919643cb8a5a8bc57642d99f' login_manager.init_app(app) login_manager.login_view = "login" jinja_partials.register_extensions(app) -htmx = HTMX(app) -db = DataBase(app) +init_app(app) +app.register_blueprint(timer, url_prefix='/timer') class User(UserMixin): def __init__(self, id, username, password_hash, created_at): diff --git a/db.py b/db.py index 95b9795..090d855 100644 --- a/db.py +++ b/db.py @@ -6,7 +6,7 @@ from urllib.parse import urlparse from flask import g class DataBase(): - def __init__(self, app): + def __init__(self, app=None): db_url = urlparse(os.environ['DATABASE_URL']) # if db_url is null then throw error if not db_url: diff --git a/extensions.py b/extensions.py new file mode 100644 index 0000000..6518205 --- /dev/null +++ b/extensions.py @@ -0,0 +1,17 @@ +from jinja2 import Environment, FileSystemLoader, select_autoescape +from db import DataBase +from flask_htmx import HTMX +from flask import url_for + +db = DataBase() +htmx = HTMX() + +environment = Environment( + loader=FileSystemLoader("templates"), + autoescape=select_autoescape(("html", "jinja2")) +) +environment.globals['url_for'] = url_for + + +def init_app(app): + htmx.init_app(app) diff --git a/routes/timer.py b/routes/timer.py new file mode 100644 index 0000000..3199e96 --- /dev/null +++ b/routes/timer.py @@ -0,0 +1,17 @@ +from flask import Blueprint, render_template, redirect, url_for, flash +from jinja2_fragments import render_block +from werkzeug.security import generate_password_hash, check_password_hash +from flask_login import login_user, login_required, logout_user +from extensions import db, htmx, environment + +timer = Blueprint('timer', __name__) + +@timer.route('/overview') +@login_required +def overview(): + + if htmx: + return render_block(environment, 'dashboard/timer_functions/overview.html', 'page') + return render_template('dashboard/timer_functions/overview.html') + + diff --git a/templates/dashboard.html b/templates/dashboard.html index f6f6f31..50a7382 100644 --- a/templates/dashboard.html +++ b/templates/dashboard.html @@ -33,16 +33,16 @@ HTTP diff --git a/templates/dashboard/timer_functions/overview.html b/templates/dashboard/timer_functions/overview.html new file mode 100644 index 0000000..5405cf3 --- /dev/null +++ b/templates/dashboard/timer_functions/overview.html @@ -0,0 +1,119 @@ +{% extends 'dashboard.html' %} + +{% block page %} + +
+
+

Timer Functions

+ +
+ +
+
+ + + + + + + + + + {% for function in http_functions %} + + + + + + {% endfor %} + + {% if http_functions|length == 0 %} + + + + {% endif %} + +
NameURL +
+
+ {{ function.name }} + + #{{ function.invoked_count }} + + + v{{ function.version_number }} + + {% if function.is_public %} + + + + + + {% endif %} +
+
+ +
+

No functions found

+
+
+
+
+ +{% endblock %} \ No newline at end of file