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.

98 lines
2.4 KiB
Python

1 year ago
import os
import subprocess
1 year ago
import yaml
1 year ago
from dotenv import load_dotenv
from flask import (Flask, redirect, render_template, request,
send_from_directory, url_for)
1 year ago
from markdown import markdown
1 year ago
import yafg
1 year ago
1 year ago
from datetime import datetime
1 year ago
from prefix import PrefixMiddleware
1 year ago
1 year ago
1 year ago
load_dotenv()
PORT = os.environ.get("PORT", 3000)
DEBUG = os.environ.get("DEBUG", True)
PREFIX = os.environ.get("PREFIX", "")
REPO = os.environ.get("REPO", "https://git.xpub.nl/kamo/thesis.git")
1 year ago
1 year ago
def pull():
1 year ago
print("Retrieving contents")
subprocess.call(["sh", "update.sh", REPO])
1 year ago
1 year ago
def render():
with open("index.yaml", "r") as i:
1 year ago
index = yaml.safe_load(i)
entries = []
for entry in index:
1 year ago
with open(os.path.join("contents", entry)) as e:
html = markdown(
1 year ago
e.read().replace("../img", "img"),
1 year ago
extensions=[
"markdown.extensions.attr_list",
"markdown.extensions.codehilite",
"markdown.extensions.fenced_code",
"markdown.extensions.admonition",
1 year ago
"markdown.extensions.abbr",
yafg.YafgExtension(stripTitle=False)
],
# extension_configs={
# 'markdown.extensions.codehilite': {
# 'guess_lang': False,
# }
# }
1 year ago
)
1 year ago
entries.append(html)
1 year ago
1 year ago
last_update = datetime.now().strftime('%d-%m-%y %X')
1 year ago
1 year ago
with open("index.html", "w") as r:
1 year ago
r.write(render_template("render.html", contents=entries, last_update=last_update))
1 year ago
1 year ago
return "rendered"
1 year ago
pull()
1 year ago
app = Flask(__name__)
1 year ago
app.wsgi_app = PrefixMiddleware(app.wsgi_app, prefix=PREFIX)
1 year ago
1 year ago
@app.route("/")
1 year ago
def home():
1 year ago
return send_from_directory(app.root_path, "index.html")
1 year ago
1 year ago
@app.route("/img/<filename>")
def send_image(filename):
return send_from_directory(os.path.join(app.root_path, "contents", "img"), filename)
1 year ago
@app.route("/update", methods=["GET", "POST"])
1 year ago
def update():
1 year ago
if request.method == "POST":
print("Rendering the homepage after weebhook request")
1 year ago
pull()
render()
1 year ago
return "GET method not supported"
1 year ago
@app.route("/render")
def manual_render():
print("Manual rendering the homepage")
render()
return redirect(url_for("home"))
@app.before_first_request
def prepare_page():
print("Rendering the homepage")
render()
1 year ago
app.run(port=PORT, debug=DEBUG)