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.

62 lines
1.6 KiB
Python

1 year ago
import os
import subprocess
from flask import Flask, render_template, request, send_from_directory
from prefix import PrefixMiddleware
from dotenv import load_dotenv
from markdown import markdown
import yaml
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")
SERVER_NAME = os.environ.get("SERVER_NAME", "localhost:3000")
def pull():
print('Retrieving contents')
subprocess.call(['sh', 'update.sh', REPO])
def render():
with open('index.yaml',"r") as i:
index = yaml.safe_load(i)
entries = []
for entry in index:
with open(os.path.join('contents', entry)) as e:
html = markdown(e.read(), extensions=[
'markdown.extensions.attr_list',
'markdown.extensions.codehilite',
'markdown.extensions.fenced_code'
])
entries.append(html)
with open('index.html', 'w') as r:
r.write(render_template("render.html", contents=entries))
return 'rendered'
app = Flask(__name__)
app.wsgi_app = PrefixMiddleware(app.wsgi_app, prefix=PREFIX)
app.config['SERVER_NAME'] = SERVER_NAME
pull();
with app.app_context():
render();
@app.route('/')
def home():
return send_from_directory(app.root_path, 'index.html')
@app.route('/update', methods=['GET', 'POST'])
def update():
if request.method == 'POST':
pull();
return 'GET method not supported'
app.run(port=PORT, debug=DEBUG)