From 03dae872720949cba64baf5d9801b992a4d285b3 Mon Sep 17 00:00:00 2001 From: Nathan Woodburn Date: Thu, 30 Oct 2025 18:22:21 +1100 Subject: [PATCH 01/18] feat: Refactor blueprints to make them easier to import --- blueprints/acme.py | 4 ++-- blueprints/api.py | 36 ++++++++++++++++++------------------ blueprints/blog.py | 8 ++++---- blueprints/now.py | 18 +++++++++--------- blueprints/podcast.py | 12 ++++++------ blueprints/sol.py | 8 ++++---- blueprints/spotify.py | 10 +++++----- blueprints/template.py | 4 ++-- blueprints/wellknown.py | 10 +++++----- server.py | 21 ++++++--------------- templates/index.html | 2 +- 11 files changed, 62 insertions(+), 71 deletions(-) diff --git a/blueprints/acme.py b/blueprints/acme.py index f543551..bf1e3c2 100644 --- a/blueprints/acme.py +++ b/blueprints/acme.py @@ -3,10 +3,10 @@ import os from cloudflare import Cloudflare from tools import json_response -acme_bp = Blueprint('acme', __name__) +app = Blueprint('acme', __name__) -@acme_bp.route("/hnsdoh-acme", methods=["POST"]) +@app.route("/hnsdoh-acme", methods=["POST"]) def post(): # Get the TXT record from the request if not request.is_json or not request.json: diff --git a/blueprints/api.py b/blueprints/api.py index a8a00c9..d61f855 100644 --- a/blueprints/api.py +++ b/blueprints/api.py @@ -5,7 +5,7 @@ import requests import re from mail import sendEmail from tools import getClientIP, getGitCommit, json_response, parse_date, get_tools_data -from blueprints.sol import sol_bp +from blueprints import sol from dateutil import parser as date_parser from blueprints.spotify import get_spotify_track @@ -17,9 +17,9 @@ HTTP_NOT_FOUND = 404 HTTP_UNSUPPORTED_MEDIA = 415 HTTP_SERVER_ERROR = 500 -api_bp = Blueprint('api', __name__) +app = Blueprint('api', __name__, url_prefix='/api/v1') # Register solana blueprint -api_bp.register_blueprint(sol_bp) +app.register_blueprint(sol.app) # Load configuration NC_CONFIG = requests.get( @@ -30,8 +30,8 @@ if 'time-zone' not in NC_CONFIG: NC_CONFIG['time-zone'] = 10 -@api_bp.route("/") -@api_bp.route("/help") +@app.route("/") +@app.route("/help") def help(): """Provide API documentation and help.""" return jsonify({ @@ -57,18 +57,18 @@ def help(): "status": HTTP_OK }) -@api_bp.route("/status") -@api_bp.route("/ping") +@app.route("/status") +@app.route("/ping") def status(): return json_response(request, "200 OK", HTTP_OK) -@api_bp.route("/version") +@app.route("/version") def version(): """Get the current version of the website.""" return jsonify({"version": getGitCommit()}) -@api_bp.route("/time") +@app.route("/time") def time(): """Get the current time in the configured timezone.""" timezone_offset = datetime.timedelta(hours=NC_CONFIG["time-zone"]) @@ -84,7 +84,7 @@ def time(): }) -@api_bp.route("/timezone") +@app.route("/timezone") def timezone(): """Get the current timezone setting.""" return jsonify({ @@ -94,7 +94,7 @@ def timezone(): }) -@api_bp.route("/message") +@app.route("/message") def message(): """Get the message from the configuration.""" return jsonify({ @@ -104,7 +104,7 @@ def message(): }) -@api_bp.route("/ip") +@app.route("/ip") def ip(): """Get the client's IP address.""" return jsonify({ @@ -113,7 +113,7 @@ def ip(): }) -@api_bp.route("/email", methods=["POST"]) +@app.route("/email", methods=["POST"]) def email_post(): """Send an email via the API (requires API key).""" # Verify json @@ -135,7 +135,7 @@ def email_post(): return sendEmail(data) -@api_bp.route("/project") +@app.route("/project") def project(): """Get information about the current git project.""" gitinfo = { @@ -168,7 +168,7 @@ def project(): "status": HTTP_OK }) -@api_bp.route("/tools") +@app.route("/tools") def tools(): """Get a list of tools used by Nathan Woodburn.""" try: @@ -184,7 +184,7 @@ def tools(): return json_response(request, {"tools": tools}, HTTP_OK) -@api_bp.route("/playing") +@app.route("/playing") def playing(): """Get the currently playing Spotify track.""" track_info = get_spotify_track() @@ -193,7 +193,7 @@ def playing(): return json_response(request, {"spotify": track_info}, HTTP_OK) -@api_bp.route("/headers") +@app.route("/headers") def headers(): """Get the request headers.""" headers = dict(request.headers) @@ -216,7 +216,7 @@ def headers(): "status": HTTP_OK }) -@api_bp.route("/page_date") +@app.route("/page_date") def page_date(): url = request.args.get("url") if not url: diff --git a/blueprints/blog.py b/blueprints/blog.py index c94dc6f..948edd6 100644 --- a/blueprints/blog.py +++ b/blueprints/blog.py @@ -5,7 +5,7 @@ from bs4 import BeautifulSoup import re from tools import isCLI, getClientIP, getHandshakeScript -blog_bp = Blueprint('blog', __name__) +app = Blueprint('blog', __name__, url_prefix='/blog') def list_page_files(): @@ -108,7 +108,7 @@ def render_home(handshake_scripts: str | None = None): ) -@blog_bp.route("/") +@app.route("/") def index(): if not isCLI(request): return render_home(handshake_scripts=getHandshakeScript(request.host)) @@ -129,7 +129,7 @@ def index(): }), 200 -@blog_bp.route("/") +@app.route("/") def path(path): if not isCLI(request): return render_page(path, handshake_scripts=getHandshakeScript(request.host)) @@ -152,7 +152,7 @@ def path(path): }), 200 -@blog_bp.route("/.md") +@app.route("/.md") def path_md(path): if not os.path.exists(f"data/blog/{path}.md"): return render_template("404.html"), 404 diff --git a/blueprints/now.py b/blueprints/now.py index 913626c..b25f6c6 100644 --- a/blueprints/now.py +++ b/blueprints/now.py @@ -4,7 +4,7 @@ import os from tools import getHandshakeScript # Create blueprint -now_bp = Blueprint('now', __name__) +app = Blueprint('now', __name__, url_prefix='/now') def list_page_files(): @@ -51,18 +51,18 @@ def render(date, handshake_scripts=None): return render_template(f"now/{date}.html", DATE=date_formatted, handshake_scripts=handshake_scripts) -@now_bp.route("/") +@app.route("/") def index(): return render_latest(handshake_scripts=getHandshakeScript(request.host)) -@now_bp.route("/") +@app.route("/") def path(path): return render(path, handshake_scripts=getHandshakeScript(request.host)) -@now_bp.route("/old") -@now_bp.route("/old/") +@app.route("/old") +@app.route("/old/") def old(): now_dates = list_dates()[1:] html = '