from flask import Flask, render_template, send_from_directory import os from glob import glob from markdown import markdown def list_dir(folder): return os.listdir(folder) def list_entries(folder): return glob(f"{folder}/*.md") def get_content(file): with open(file) as f: content = f.read() return markdown(content) class PrefixMiddleware(object): def __init__(self, app, prefix=""): self.app = app self.prefix = prefix def __call__(self, environ, start_response): if environ["PATH_INFO"].startswith(self.prefix): environ["PATH_INFO"] = environ["PATH_INFO"][len(self.prefix) :] environ["SCRIPT_NAME"] = self.prefix return self.app(environ, start_response) else: start_response("404", [("Content-Type", "text/plain")]) return ["This url does not belong to the app.".encode()] app = Flask(__name__) # register the middleware to prefix all the requests with our base_url app.wsgi_app = PrefixMiddleware(app.wsgi_app, prefix='/soupboat/diyry') @app.route("/") def home(): issues=list_dir("issues") return render_template("home.html", issues=issues) @app.route("/issues//") def issue(slug): entries = "" for entry in list_entries(f"issues/{slug}"): entries += get_content(entry) return render_template("issue.html", issue=slug, entries=entries) @app.route("/issues//") def file(slug, file): return send_from_directory(f"issues/{slug}", file) app.run(port=3152, debug=True)