116 lines
3.7 KiB
Python
116 lines
3.7 KiB
Python
import sys
|
|
from flask import Flask, Blueprint,render_template, send_from_directory,jsonify, url_for
|
|
from flask_flatpages import FlatPages, pygments_style_defs
|
|
from flatpages import FlatPagesIndex
|
|
from flask_frozen import Freezer
|
|
from config import Config
|
|
import os
|
|
import re
|
|
from os.path import isfile, abspath
|
|
from utils import pjoin2
|
|
from utils import pjoin, list_dir, path_depth
|
|
from functools import partial
|
|
from collections import namedtuple
|
|
|
|
package_directory = os.path.dirname(os.path.abspath(__file__))
|
|
cfg = Config(file(os.path.join(package_directory, 'config.cfg')))
|
|
|
|
# Loading constants from config file
|
|
FLATPAGES_AUTO_RELOAD = cfg.pages_reload
|
|
FLATPAGES_EXTENSION = '.md'
|
|
FLATPAGES_ROOT = abspath(cfg.pages_root)
|
|
FLATPAGES_FP_ROOT = abspath(cfg.pages_root)
|
|
|
|
# Initialize application
|
|
app = Flask(__name__)
|
|
|
|
flatpages = FlatPagesIndex(app)
|
|
flatpages.get('index')
|
|
freezer = Freezer(app)
|
|
app.config.from_object(__name__)
|
|
|
|
page_blueprint = Blueprint('intern', __name__)
|
|
|
|
|
|
# List all non *.md files within the directory
|
|
list_dir_md=partial(list_dir, not_ext=["md","~"])
|
|
|
|
# List all jpg images within the directory
|
|
list_dir_img=partial(list_dir, ext="jpg")
|
|
|
|
# List all subpages of the current page
|
|
get_sub_pages = partial(FlatPagesIndex.get_sub_pages, flatpages)
|
|
get_sub_ipages = partial(FlatPagesIndex.get_sub_ipages, flatpages)
|
|
|
|
|
|
def get_bc(path):
|
|
return flatpages.get_pages(FlatPagesIndex.breadcrumbs(path))
|
|
# return get_breadcrumb_pages(get_breadcrumb_paths(path))
|
|
|
|
|
|
# completes the meta hash if a configuration is not set
|
|
def page_defaults(page, is_index, path):
|
|
page.meta["title"]=page.meta.get("title", path.split('/')[-1])
|
|
page.meta["template"]=page.meta.get("template", cfg.default_template)
|
|
return page
|
|
|
|
def load_lists_for_templates(path, is_index):
|
|
path2 = pjoin(FLATPAGES_ROOT,path)
|
|
if is_index == True:
|
|
ld=list_dir_md(path2)
|
|
il=list_dir_img(path2)
|
|
sp=list(get_sub_pages(path))
|
|
spi=list(get_sub_ipages(path))
|
|
else:
|
|
ld=[]
|
|
sp=[]
|
|
spi=[]
|
|
il=[]
|
|
bc=get_bc(path)
|
|
return (ld, il, sp, spi,bc)
|
|
|
|
@page_blueprint.route('/<path:name>/')
|
|
@page_blueprint.route('/')
|
|
def post(name='index'):
|
|
is_index, path, page = flatpages.get_flatpage(name)
|
|
app.logger.info('render '+name)
|
|
if not page is None:
|
|
page=page_defaults(page, is_index, path)
|
|
ld, il, sp, spi, bc = load_lists_for_templates(path,is_index)
|
|
return render_template(page.meta["template"], ld=ld, post=page, sp=sp, spi=spi, il=il, pth=path, pagebreadcrumbs=bc)
|
|
|
|
if os.path.exists(os.path.join(FLATPAGES_ROOT,path)):
|
|
return send_from_directory(FLATPAGES_ROOT,path)
|
|
else:
|
|
return send_from_directory('static',path)
|
|
|
|
|
|
def json_url_for(paths):
|
|
for p in paths:
|
|
yield url_for('intern.postjson', name=p)
|
|
|
|
@page_blueprint.route('/<path:name>.json/')
|
|
def postjson(name='index'):
|
|
is_index, path, page = flatpages.get_flatpage(name)
|
|
if not page is None:
|
|
ld, il, sp, spi, bc = load_lists_for_templates(path, is_index)
|
|
page_defaults(page, is_index, path)
|
|
p=page.meta
|
|
p["depth"]=path_depth(path)
|
|
p["path"]=path
|
|
p["breadcrumbs"]=list(bc)
|
|
p["subfolders"]=list(json_url_for(FlatPagesIndex.get_paths(spi)))
|
|
p["subpages"]= list(json_url_for(FlatPagesIndex.get_paths(sp)))
|
|
p["text"]=page.html
|
|
return jsonify(page=p)
|
|
|
|
if os.path.exists(u'{}/{}'.format(FLATPAGES_ROOT,path)):
|
|
return send_from_directory(FLATPAGES_ROOT,path)
|
|
else:
|
|
return send_from_directory('static',path)
|
|
|
|
|
|
|
|
app.register_blueprint(page_blueprint, url_prefix=cfg.url_prefix,static_folder='static')
|
|
app.add_url_rule('%s/<path:name>/' % cfg.url_prefix,'page', post)
|