From e7deab64301760ad0b1128a45ea2ef166180f00a Mon Sep 17 00:00:00 2001 From: Andreas Stephanides Date: Thu, 13 Feb 2020 18:44:50 +0100 Subject: [PATCH] created a simple sample --- .gitignore | 8 +++ config.cfg.sample | 6 ++ data/ghg/index.md | 0 data/ghg/test.jpg | 0 data/ghg/test.md | 0 data/index.md | 1 + data/tg/index.md | 0 requirements.txt | 6 ++ run.py | 9 +++ simple_sample.nginx.conf | 16 +++++ simple_sample.service | 13 ++++ simple_sample/__init__.py | 94 +++++++++++++++++++++++++++++ simple_sample/templates/layout.html | 25 ++++++++ simple_sample/templates/page.html | 53 ++++++++++++++++ uwsgi.ini | 24 ++++++++ 15 files changed, 255 insertions(+) create mode 100644 .gitignore create mode 100644 config.cfg.sample create mode 100644 data/ghg/index.md create mode 100644 data/ghg/test.jpg create mode 100644 data/ghg/test.md create mode 100644 data/index.md create mode 100644 data/tg/index.md create mode 100644 requirements.txt create mode 100644 run.py create mode 100644 simple_sample.nginx.conf create mode 100644 simple_sample.service create mode 100644 simple_sample/__init__.py create mode 100644 simple_sample/templates/layout.html create mode 100644 simple_sample/templates/page.html create mode 100644 uwsgi.ini diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..3019225 --- /dev/null +++ b/.gitignore @@ -0,0 +1,8 @@ +*~ +*.pyc +.env +env +*.cfg +*.log +*.sock +*.pid \ No newline at end of file diff --git a/config.cfg.sample b/config.cfg.sample new file mode 100644 index 0000000..3e081e3 --- /dev/null +++ b/config.cfg.sample @@ -0,0 +1,6 @@ +pages_root: 'data_sample' +static_root: 'static' +default_template: 'page.html' +url_prefix: "/stuff" +FLATPAGES_EXTENSION: ".md" +FLATPAGES_AUTO_RELOAD: True diff --git a/data/ghg/index.md b/data/ghg/index.md new file mode 100644 index 0000000..e69de29 diff --git a/data/ghg/test.jpg b/data/ghg/test.jpg new file mode 100644 index 0000000..e69de29 diff --git a/data/ghg/test.md b/data/ghg/test.md new file mode 100644 index 0000000..e69de29 diff --git a/data/index.md b/data/index.md new file mode 100644 index 0000000..74338e5 --- /dev/null +++ b/data/index.md @@ -0,0 +1 @@ +title: title diff --git a/data/tg/index.md b/data/tg/index.md new file mode 100644 index 0000000..e69de29 diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..5913218 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,6 @@ +flask +Frozen-Flask +config +uwsgi +gevent + diff --git a/run.py b/run.py new file mode 100644 index 0000000..aa857bb --- /dev/null +++ b/run.py @@ -0,0 +1,9 @@ +from simple_sample import app,freezer +import sys + +if __name__ == "__main__": + if len(sys.argv) > 1 and sys.argv[1] == "build": + freezer.freeze() + else: + app.run(host='0.0.0.0',port=4444, debug=True) + diff --git a/simple_sample.nginx.conf b/simple_sample.nginx.conf new file mode 100644 index 0000000..3787b23 --- /dev/null +++ b/simple_sample.nginx.conf @@ -0,0 +1,16 @@ +server { + listen 80 default_server; + listen [::]:80 ; + index index.html index.htm index.nginx-debian.html; + + server_name _; + + root /var/www/html; + + location / { + include uwsgi_params; + uwsgi_pass unix:///srv/simple_sample_flat_index/uwsgi.sock; + +} + +} \ No newline at end of file diff --git a/simple_sample.service b/simple_sample.service new file mode 100644 index 0000000..3051814 --- /dev/null +++ b/simple_sample.service @@ -0,0 +1,13 @@ +[Unit] +Description=uWSGI Simple Sample for Flat Page with Index Default +After=network.target + +[Service] +User=www-data +Group=www-data +WorkingDirectory=/srv/simple_sample_flat_index +Environment="PATH=/srv/simple_sample_flat_index/.env/bin" +ExecStart=uwsgi --ini uwsgi.ini + +[Install] +WantedBy=multi-user.target \ No newline at end of file diff --git a/simple_sample/__init__.py b/simple_sample/__init__.py new file mode 100644 index 0000000..61ee0d4 --- /dev/null +++ b/simple_sample/__init__.py @@ -0,0 +1,94 @@ +""" +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 logging +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_index import FlatPagesIndex +from flask_frozen import Freezer +from config import Config +import os +import re +from flatpages_index.utils import path_depth, page_to_link, page_to_link, file_to_link +from functools import partial +#from .flatpages import FileLists + +# This is the directory, required for absolute file paths +package_directory = os.path.dirname(os.path.abspath(__file__)) +# Loading the config file +cfg = Config((os.path.join(package_directory, '../config.cfg'))) + +# Loading constants from config file +FLATPAGES_AUTO_RELOAD = cfg.get("FLATPAGES_AUTO_RELOAD",True) # Default can be overwritten by config cfg +FLATPAGES_EXTENSION = cfg.get("FLATPAGES_EXTENSION",".md") # Default can be overwritten by config cfg +FLATPAGES_ROOT = os.path.abspath(cfg.pages_root) + + +# Initialize application +app = Flask(__name__) +app.config.from_object(__name__) + +app.logger.setLevel(logging.DEBUG) +# Initialize FlatPages Index +#FlatPagesIndex.FLATPAGES_ROOT=FLATPAGES_ROOT +flatpages = FlatPagesIndex(app) +flatpages.get('index') + +app.logger.info('Initialize SimpleSample App') +app.logger.info('flatpages loaded %d pages' % len(flatpages._pages)) +app.logger.info("Data directory is: %s" % flatpages.root) +app.logger.info("Url prefix;: %s" % cfg.url_prefix) +app.logger.info("Extensions: %s" % FLATPAGES_EXTENSION) + + + + + + +freezer = Freezer(app) + + +page_blueprint = Blueprint('intern', __name__) + +@page_blueprint.route('//') +@page_blueprint.route('/') +def post(name='index'): + page = flatpages.get(name) + + if not page is None: + page.meta["has_img"]=page.meta.get('has_img',True) + page=page.load_linklists(partial(url_for,'intern.post')) + return render_template(page.meta["template"], post=page, + pth=page.meta["dirpath"]) + + if os.path.exists(os.path.join(FLATPAGES_ROOT,name)): + return send_from_directory(FLATPAGES_ROOT,name) + else: + return send_from_directory('static',name) + + + + +@page_blueprint.route('/.json',strict_slashes=False) +def postjson(name='index'): + page = flatpages.get(name) + if not page is None: + page.meta["has_img"]=page.meta.get('has_img',True) + + page=page.load_linklists(partial(url_for,'intern.post')) + p=page.meta + + p["html"]=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) diff --git a/simple_sample/templates/layout.html b/simple_sample/templates/layout.html new file mode 100644 index 0000000..5ba2b07 --- /dev/null +++ b/simple_sample/templates/layout.html @@ -0,0 +1,25 @@ +{# -*-jinja2-*- #} + + + + +
+
+
+ + + {% block content %} + {% endblock %} + + +
+
+
+ + + diff --git a/simple_sample/templates/page.html b/simple_sample/templates/page.html new file mode 100644 index 0000000..5a2f060 --- /dev/null +++ b/simple_sample/templates/page.html @@ -0,0 +1,53 @@ +{# -*-jinja2-*- #} +{% extends "layout.html" %} +{% block content %} + +

{{post.title}}

+{{post.date}} +{% if post.sub_index_pages | length > 0 %} +
+ Unterseiten: + +{% endif %} + +{{ post.helloworld() }} +{{ post.html|safe }} + + +{% if post.sub_pages |length > 0 %} + +{% endif %} + +{% if post.list_files |length > 0 %} + +
+ +Files: +
    + {% for d in post.list_files %} +
  • + {{d}} +
  • + {% endfor %} +
+{% endif %} + +{% endblock %} diff --git a/uwsgi.ini b/uwsgi.ini new file mode 100644 index 0000000..07e284a --- /dev/null +++ b/uwsgi.ini @@ -0,0 +1,24 @@ +[uwsgi] +# User and group www-data on debian +uid = 33 +gid = 33 +master = true +# No. of processes can be increased +processes = 7 +chown-socket =www-data:www-data +virtualenv = /srv/simple_sample_flat_index/.env +pythonpath = /srv/simple_sample_flat_index/ +#pidfile = /srv/simple_sample_flat_index/uwsgi.pid +#socket = /srv/simple_sample_flat_index/uwsgi.sock +pidfile=/var/run/simple_sample.pid +socket = /var/run/simple_sample.sock +chmod-socket = 666 +module = simple_sample +callable= app +wsgi-file = run.py +logdate = true +#logger = file:/srv/simple_sample_flat_index/uwsgi.log +loglevel = debug +gevent = 100 +vacuum=true +plugins=python3,logfile \ No newline at end of file