From 81ea991c5b1fd774ead388ebbd08f32043874c3f Mon Sep 17 00:00:00 2001 From: Andreas Stephanides Date: Mon, 17 Apr 2017 00:26:03 +0200 Subject: [PATCH] upgrade1 --- __init__.py | 100 ++++++++++++++++++++++++++++++++------------ config.cfg | 2 +- templates/page.html | 44 +++++++++++++++++++ 3 files changed, 119 insertions(+), 27 deletions(-) create mode 100644 templates/page.html diff --git a/__init__.py b/__init__.py index 24da475..b2bbd3b 100644 --- a/__init__.py +++ b/__init__.py @@ -1,5 +1,5 @@ import sys -from flask import Flask, render_template, send_from_directory +from flask import Flask, render_template, send_from_directory,jsonify from flask_flatpages import FlatPages, pygments_style_defs from flask_frozen import Freezer from config import Config @@ -11,68 +11,84 @@ package_directory = os.path.dirname(os.path.abspath(__file__)) #cfg = Config(file('./config.cfg')) 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 = FlatPages(app) flatpages.get('index') freezer = Freezer(app) app.config.from_object(__name__) -def list_dir(mypath): - return [f for f in os.listdir(mypath) if isfile(os.path.join(mypath, f)) and re.match('.*\.md.*',f) is None] +# List all non *.md files within the directory +def list_dir_md(mypath): + return [f for f in os.listdir(mypath) if isfile(os.path.join(mypath, f)) and re.match('.*\%s.*' % FLATPAGES_EXTENSION,f) is None] -def list_img(mypath): +# List all jpg images within the directory +def list_dir_img(mypath): return [f for f in os.listdir(mypath) if isfile(os.path.join(mypath, f)) and re.match('.*\.jpg',f) is not None] - +# List all subpages of the current page def get_sub_pages(path, page): ppath=page.path cc=len(path.split('/')) - return [p for p in flatpages if p.path.startswith(path) and ( re.match('.*index',p.path) is None) and len(p.path.split('/')) [a/index a/b/index] def get_bc(path, page): - ppath=page.path - elements=path.split('/')#[0:-1] - elements2=['index'] - for i in range(0,len(elements)): +# ppath = page.path + elements = path.split('/') + elements2 = ['index'] + for i in range(1,len(elements)): elements2.append(pjoin2(elements[0:i])+u'/index') - ps=[p for p in flatpages if p.path in elements2 ] +# ps=[p for p in flatpages if p.path in elements2 ] + ps=[flatpages.get(p) for p in elements2] + # ps.append(['index']) return ps - +# load a page from a path information def get_flatpage(path): is_index=False - if path == 'index' or path=='': + # root index + if path == 'index' or path=='': is_index=True path='' pathi='index' else: - if path.split('/')[-1]=='index': + if path.split('/')[-1]=='index': # last element is "index" ? is_index=True - path='/'.join(path.split('/')[0:-1]) - pathi = u'{}/{}'.format(path, 'index') - page = flatpages.get(pathi) - if not page is None: + path='/'.join(path.split('/')[0:-1]) # remove index from path + pathi = u'{}/{}'.format(path, 'index') # try to add index to the path + page = flatpages.get(pathi) # try to load index page + if not page is None: # if successful it is a index is_index=True - else: + else: page=flatpages.get(path) return (is_index, path, page) + def pjoin (rt,pth): return u'{}/{}'.format(rt,pth) @@ -88,19 +104,19 @@ def page_defaults(page, is_index, path): if misskey(page.meta,"title"): page.meta["title"]=path.split('/')[-1] if misskey(page.meta, "template"): - page.meta["template"]='post.html' + page.meta["template"]='page.html' return page @app.route('//') def post(name='index'): is_index, path, page = get_flatpage(name) - app.logger.info('render'+name) + app.logger.info('render '+name) path2 = pjoin(FLATPAGES_ROOT,path) if is_index == True and not page is None: - ld=list_dir(path2) - il=list_img(path2) + ld=list_dir_md(path2) + il=list_dir_img(path2) sp=get_sub_pages(path,page) spi=get_sub_ipages(path,page) else: @@ -118,3 +134,35 @@ def post(name='index'): else: return send_from_directory('static',path) + + +@app.route('/.json/') +def postjson(name='index'): + is_index, path, page = get_flatpage(name) + app.logger.info('render '+name) + path2 = pjoin(FLATPAGES_ROOT,path) + + if is_index == True and not page is None: + ld=list_dir_md(path2) + il=list_dir_img(path2) + sp=get_sub_pages(path,page) + spi=get_sub_ipages(path,page) + else: + ld=[] + sp=[] + spi=[] + il=[] + if not page is None: + page_defaults(page,is_index,path) + app.logger.info("Render Template"+page["template"] +"for "+path) + p=page.meta + p["text"]=page.html + return jsonify(page=p) + # return render_template(page.meta["template"], ld=ld, post=page, sp=sp, spi=spi, il=il, pth=path, pagebreadcrumbs=get_bc(path,page)) + + + if os.path.exists(u'{}/{}'.format(FLATPAGES_ROOT,path)): + return send_from_directory(FLATPAGES_ROOT,path) + else: + return send_from_directory('static',path) + diff --git a/config.cfg b/config.cfg index bdd7a41..6bc1dac 100644 --- a/config.cfg +++ b/config.cfg @@ -1,3 +1,3 @@ -pages_root: '/mnt/data' +pages_root: '/home/andreas/www/tmp/int1/data' pages_reload: True static_root: 'static' \ No newline at end of file diff --git a/templates/page.html b/templates/page.html new file mode 100644 index 0000000..8f94e67 --- /dev/null +++ b/templates/page.html @@ -0,0 +1,44 @@ +{% extends "layout.html" %} +{% block content %} + +

{{post.title}}

+{{post.date}} +{% if spi|length > 0 %} +{{ post.html|safe }} +
+ Unterseiten: + +{% endif %} +{% if sp|length > 0 %} + + +{% endif %} +
+Files: +
    + {% for d in ld %} +
  • + {{d}} +
  • + {% endfor %} +
+{% endblock %}