Files
website/app.py
2025-07-19 17:25:31 -04:00

76 lines
2.0 KiB
Python

# /// script
# dependencies = ["flask", "flask_cors", "waitress", "markdown"]
# ///
import os
import json
import markdown
from flask import Flask, render_template, send_from_directory
from flask_cors import CORS
app = Flask(__name__, template_folder='.', static_folder='static')
CORS(app)
@app.route("/favicon.ico")
def favicon():
return send_from_directory(
os.path.join(app.root_path, 'static/assets/favicon.ico'),
'favicon.ico', mimetype='image/x-icon'
)
@app.errorhandler(404)
def not_found(e):
return render_template("./templates/not_found.html")
@app.route("/home")
def home():
return render_template("./templates/home.html")
@app.route("/")
def index():
return render_template("./templates/home.html")
@app.route("/posts")
def posts():
posts = []
for folder in os.listdir("./static/posts"):
with open(os.path.join("./static/posts", folder, "metadata.json"), "r") as f:
metadata = json.load(f)
post = {
"post_id": folder,
"metadata": metadata,
}
posts.append(post)
return render_template("./templates/post_list.html", posts=posts)
@app.route("/posts/<post_id>")
def get_post(post_id):
for folder in os.listdir("./static/posts"):
if folder == post_id:
with open(os.path.join("./static/posts", folder, "metadata.json"), "r") as f:
metadata = json.load(f)
with open(os.path.join("./static/posts", folder, "post.md"), "r") as f:
post_md = f.read()
post_html = markdown.markdown(post_md, extensions=["tables"])
post = {
"post_id": post_id,
"metadata": metadata,
"post_md": post_html,
}
return render_template("./templates/post.html", post=post)
return render_template("./templates/not_found.html")
if __name__ == "__main__":
from waitress import serve
serve(app, host="0.0.0.0", port=8080)