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 utils import path_depth, page_to_link, page_to_link, file_to_link from functools import partial from flatpages import FileLists 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 = True FLATPAGES_EXTENSION = '.md' FLATPAGES_ROOT = os.path.abspath(cfg.pages_root) FLATPAGES_FP_ROOT = os.path.abspath(cfg.pages_root) # Initialize application app = Flask(__name__) fp_cfg=dict(filter(lambda v: v[0].startswith("FLATPAGES"), zip(cfg, dict(cfg).values()))) app.config.from_object(__name__) app.config.update(cfg) FlatPagesIndex.FLATPAGES_ROOT=FLATPAGES_ROOT flatpages = FlatPagesIndex(app) flatpages.get('index') freezer = Freezer(app) page_blueprint = Blueprint('intern', __name__) # completes the meta hash if a configuration is not set def page_defaults(page, path): page.meta["title"]=page.meta.get("title", path.split('/')[-1]) page.meta["template"]=page.meta.get("template", cfg.default_template) return page @page_blueprint.route('//') @page_blueprint.route('/') def post(name='index'): is_index, path, page = flatpages.get_flatpage(name) if not page is None: page = page_defaults(page, path) fl = linklist_dict_lists(flatpages.load_linklists_for_templates(page.path,path, is_index, page.meta,partial(url_for,'intern.post'))) return render_template(page.meta["template"], post=page, pth=path, filelists=fl) 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) def filelist_dict_lists(filelists): return {"breadcrumbs": list(filelists.breadcrumbs), "sub_index_pages": list(json_url_for(FlatPagesIndex.get_paths(filelists.sub_index_pages))), "sub_pages": list(json_url_for(FlatPagesIndex.get_paths(filelists.sub_pages))), "image_list": list(filelists.list_images) } def linklist_dict_lists(filelists): return {"breadcrumbs": list(filelists.breadcrumbs), "sub_index_pages": list(filelists.sub_index_pages ), "sub_pages": list(filelists.sub_pages) , "image_list": list(filelists.list_images), "file_list": list(filelists.list_files) } @page_blueprint.route('/.json/') def postjson(name='index'): is_index, path, page = flatpages.get_flatpage(name) if not page is None: # filelists=flatpages.load_lists_for_templates(page.path, is_index,page.meta) page=page_defaults(page, path) p=page.meta # p["links"]=linklist_dict_lists(flatpages.load_linklists_for_templates(page.path, path, is_index,page.meta)) p.update(linklist_dict_lists(flatpages.load_linklists_for_templates(page.path, path, is_index,page.meta))) p["depth"]=path_depth(path) p["path"]=path 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//' % cfg.url_prefix,'page', post)