Initial commit - Begun rewrite of website generator
This commit is contained in:
75
sitebuilder.py
Executable file
75
sitebuilder.py
Executable file
@@ -0,0 +1,75 @@
|
||||
#!/usr/bin/env python
|
||||
import sys
|
||||
from os.path import basename
|
||||
from glob import glob
|
||||
|
||||
from flask import Flask, render_template, send_from_directory
|
||||
from flask_flatpages import FlatPages
|
||||
from flask_frozen import Freezer
|
||||
import arrow
|
||||
|
||||
|
||||
DEBUG = True
|
||||
FLATPAGES_AUTO_RELOAD = DEBUG
|
||||
FLATPAGES_EXTENSION = '.md'
|
||||
FLATPAGES_ROOT = 'pages'
|
||||
|
||||
app = Flask(__name__)
|
||||
app.config.from_object(__name__)
|
||||
pages = FlatPages(app)
|
||||
freezer = Freezer(app)
|
||||
|
||||
permalinks = {}
|
||||
blogposts = []
|
||||
tags = set()
|
||||
for page in pages:
|
||||
parts = page.path.split('-')
|
||||
if page.meta.get('permalink', None):
|
||||
page.meta['url'] = page.meta['permalink']
|
||||
else:
|
||||
page.meta['url'] = '/blog/{}/{}/{}/'.format(parts[0], parts[1], '-'.join(parts[3:]))
|
||||
date = arrow.get('-'.join(parts[0:3]))
|
||||
page.meta['date'] = date
|
||||
page.meta['datestr'] = date.format('D MMM YYYY')
|
||||
blogposts.append(page)
|
||||
tags.update(page.meta.get('tags', []))
|
||||
permalinks[page.meta['url']] = page
|
||||
blogposts = sorted(blogposts, key=lambda p: p.meta['date'], reverse=True)
|
||||
|
||||
# Static files
|
||||
@app.route("/src/<path:path>")
|
||||
def scripts(path):
|
||||
return send_from_directory('src', path)
|
||||
@app.route("/media/<path:path>")
|
||||
def media(path):
|
||||
return send_from_directory('media', path)
|
||||
@app.route("/favicon.ico")
|
||||
def favicon():
|
||||
return send_from_directory('src', 'favicon.ico')
|
||||
|
||||
|
||||
@app.route("/")
|
||||
def index():
|
||||
return "Hello World!"
|
||||
|
||||
@app.route("/<path:path>")
|
||||
def permalink(path):
|
||||
page = permalinks['/'+path]
|
||||
if path.startswith('blog/'):
|
||||
return render_template('post.html', page=page)
|
||||
return render_template('page.html', page=page)
|
||||
|
||||
@app.route("/blog/")
|
||||
def blog_default():
|
||||
return render_template('blog.html', posts=blogposts, tags=tags)
|
||||
|
||||
@app.route("/blog/<string:tag>/")
|
||||
def tag(tag):
|
||||
posts = [post for post in blogposts if tag in post.meta.get('tags', [])]
|
||||
return render_template('blog.html', posts=posts, title=tag, tags=tags)
|
||||
|
||||
if __name__ == "__main__":
|
||||
if len(sys.argv) > 1 and sys.argv[1] == "build":
|
||||
freezer.freeze()
|
||||
else:
|
||||
app.run()
|
||||
Reference in New Issue
Block a user