From 39484e04e724b46697b4856e971597362a0f07ac Mon Sep 17 00:00:00 2001 From: Andreas Stephanides Date: Tue, 5 Sep 2017 00:13:27 +0200 Subject: [PATCH] move dirpath to meta --- __init__.py | 29 ++++++--- flatpages.py | 160 ++++++++++++++++++++++------------------------ test_flatpages.py | 45 +++++++++++-- 3 files changed, 138 insertions(+), 96 deletions(-) diff --git a/__init__.py b/__init__.py index 3168778..b81a29d 100644 --- a/__init__.py +++ b/__init__.py @@ -1,3 +1,8 @@ +""" +This module is based on flask_flatpages and creates a website structure based on a file structure. +By default the .md extension creates a html website +""" + import sys from flask import Flask, Blueprint,render_template, send_from_directory,jsonify, url_for from flask_flatpages import FlatPages, pygments_style_defs @@ -33,26 +38,32 @@ 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]) +def page_defaults(page, dirpath, is_index=False): + if is_index: + page.meta["title"]=page.meta.get("title", dirpath.split('/')[-1]) + else: + page.meta["title"]=page.meta.get("title", page.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) + page = flatpages.get(name) + is_index=page.meta["is_index"] + dirpath=page.meta["dirpath"] + 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'))) +# page = page_defaults(page, dirpath, is_index) + fl = linklist_dict_lists(flatpages.load_linklists_for_templates(page.path, dirpath, is_index, page.meta,partial(url_for,'intern.post'))) return render_template(page.meta["template"], post=page, - pth=path, filelists=fl) + pth=dirpath, filelists=fl) - if os.path.exists(os.path.join(FLATPAGES_ROOT,path)): - return send_from_directory(FLATPAGES_ROOT,path) + if os.path.exists(os.path.join(FLATPAGES_ROOT,name)): + return send_from_directory(FLATPAGES_ROOT,name) else: - return send_from_directory('static',path) + return send_from_directory('static',name) def json_url_for(paths): diff --git a/flatpages.py b/flatpages.py index 1a9dbc1..d7069f7 100644 --- a/flatpages.py +++ b/flatpages.py @@ -4,7 +4,7 @@ from flask import url_for import re from utils import path_depth,pjoin2,pjoin,list_dir, page_to_link, file_to_link from functools import partial - +from werkzeug.utils import cached_property from collections import namedtuple FileLists=namedtuple("FileLists", ["list_files", "list_images", "sub_pages", "sub_index_pages", "breadcrumbs"]) @@ -20,6 +20,10 @@ list_dir_img=partial(list_dir, ext=["jpg", "jpeg","JPG"]) class FlatPagesIndex(FlatPages): FLATPAGES_ROOT="." + def __init__(self,app=None,name=None): + self.default_template="page.html" + super(FlatPagesIndex, self).__init__(app=app, name=name) + @staticmethod def get_breadcrumb_paths(path): """ @@ -27,12 +31,12 @@ class FlatPagesIndex(FlatPages): a/b/index -> [a/index a/b/index] """ elements = path.split('/') - print "i: %s" % elements +# print "i: %s" % elements elements2 = ['index'] if len(elements)>2: for i in range(1,len(elements)): - print "i: %s" % elements[0:i] +# print "i: %s" % elements[0:i] elements2.append(pjoin2(elements[0:i])+u'/index') return elements2 @@ -44,70 +48,91 @@ class FlatPagesIndex(FlatPages): else: return self.get_pages(FlatPagesIndex.get_breadcrumb_paths(page)) - @staticmethod - def get_paths(pages): - return (p.path for p in pages) - def get_pages(self, paths): + "get pages for a list of paths" if paths is None: raise AttributeError("paths for get_pages can't be None") return (self.get(p) for p in paths) - def get_sub_pages(self, path): - def is_subpage(path, root): - return (path.startswith(root) and # is a subpage - ( re.match('.*index',path) is None) and # is no index - path_depth(path)