This repository has been archived on 2023-01-27. You can view files and clone it, but cannot push or open issues or pull requests.
flask-wikipages/app/__init__.py

60 lines
1.6 KiB
Python

# Project is now migrating to another toolchain
# Stage1: Part of rendering is done via Makefiles
# but flask is still responsible for template substitution
from flask import Flask, url_for, render_template
import os
from app.config import PANDOC_LINK, PANDOC_PATH, WHITELIST_PATH
from app.page_model import WikiPage
from typing import List
app = Flask(__name__)
@app.context_processor
def override_url_for():
return dict(url_for=dated_url_for)
def get_all_names():
whitelist = WHITELIST_PATH
with open(whitelist, 'r') as f:
lines = f.read().splitlines()
return lines
def get_page(name: str) -> WikiPage:
path = f'{PANDOC_PATH}/{name}'
with open(f'{path}/config.json', 'r') as f:
page = WikiPage.parse_raw(f.read())
return page
def get_all_pages() -> List[WikiPage]:
return [get_page(name) for name in get_all_names()]
def dated_url_for(endpoint, **values):
if endpoint == 'static':
filename = values.get('filename', None)
if filename:
file_path = os.path.join(app.root_path, endpoint, filename)
values['q'] = int(os.stat(file_path).st_mtime)
return url_for(endpoint, **values)
@app.route(f'/{PANDOC_LINK}/<name>')
def get_pandoc_page(name: str):
if name not in get_all_names():
return "Page doesn't exist"
page = get_page(name)
template = page.template
with open(page.get_file('render.html'), 'r') as f:
inserted = f.read()
return render_template(template, markdown=inserted, config=page)
@app.route('/')
def index():
return render_template('index.html', pages=get_all_pages(), PANDOC_LINK=PANDOC_LINK)