Cleanup and building static site
This commit is contained in:
@@ -1,11 +1,8 @@
|
||||
#!/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 import Flask, render_template, request
|
||||
from flask_flatpages import FlatPages
|
||||
from flask_frozen import Freezer
|
||||
import arrow
|
||||
|
||||
|
||||
@@ -18,59 +15,64 @@ FLATPAGES_MARKDOWN_EXTENSIONS = ['codehilite', 'extra']
|
||||
app = Flask(__name__)
|
||||
app.config.from_object(__name__)
|
||||
pages = FlatPages(app)
|
||||
freezer = Freezer(app)
|
||||
|
||||
permalinks = {}
|
||||
blogposts = []
|
||||
tags = set()
|
||||
# Find all pages
|
||||
for page in pages:
|
||||
parts = page.path.split('-')
|
||||
if page.meta.get('permalink', None):
|
||||
# Special page
|
||||
page.meta['url'] = page.meta['permalink']
|
||||
else:
|
||||
# Blog post
|
||||
blogposts.append(page)
|
||||
tags.update(page.meta.get('tags', []))
|
||||
# Setup permalink
|
||||
parts = page.path.split('-')
|
||||
page.meta['url'] = '/blog/{}/{}/{}/'.format(parts[0], parts[1], '-'.join(parts[3:]))
|
||||
|
||||
# Find and format post publication date
|
||||
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):
|
||||
def permalink(path=''):
|
||||
page = permalinks['/'+path]
|
||||
if path.startswith('blog/'):
|
||||
return render_template('post.html', page=page)
|
||||
return render_template('page.html', page=page)
|
||||
template = 'blog_post.html' if page in blogposts else 'page.html'
|
||||
return render_template(template, 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)
|
||||
def blog_listing(tag=None):
|
||||
posts = blogposts
|
||||
if tag:
|
||||
posts = [post for post in posts if tag in post.meta.get('tags', [])]
|
||||
return render_template('blog_listing.html', posts=posts, tags=tags, title=tag)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
if len(sys.argv) > 1 and sys.argv[1] == "build":
|
||||
from flask_frozen import Freezer
|
||||
from glob import iglob
|
||||
from shutil import move, rmtree
|
||||
freezer = Freezer(app)
|
||||
freezer.freeze()
|
||||
for f in iglob('build/static/*'):
|
||||
move(f, 'build/'+f[len('build/static/'):])
|
||||
rmtree('build/static/')
|
||||
else:
|
||||
@app.route("/media/<path:path>")
|
||||
@app.route("/src/<path:path>")
|
||||
@app.route("/favicon.ico")
|
||||
def static_file(path):
|
||||
return app.send_static_file(request.path[1:])
|
||||
app.run()
|
||||
|
||||
Reference in New Issue
Block a user