You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
54 lines
1.5 KiB
Python
54 lines
1.5 KiB
Python
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/<slug>/")
|
|
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/<slug>/<file>")
|
|
def file(slug, file):
|
|
return send_from_directory(f"issues/{slug}", file)
|
|
|
|
app.run(port=3152, debug=True) |