summaryrefslogtreecommitdiffstats
path: root/app/__init__.py
diff options
context:
space:
mode:
Diffstat (limited to 'app/__init__.py')
-rw-r--r--app/__init__.py78
1 files changed, 78 insertions, 0 deletions
diff --git a/app/__init__.py b/app/__init__.py
index e69de29..6c6b08c 100644
--- a/app/__init__.py
+++ b/app/__init__.py
@@ -0,0 +1,78 @@
+# -*- coding: utf-8 -*-
+
+from flask import Flask, render_template, g
+from .main import main
+from .backend import Storage
+import sys
+reload(sys)
+sys.setdefaultencoding('utf-8')
+
+def create_app(config=None):
+ """Creates the Flask app."""
+ app = Flask(__name__)
+
+ configure_app(app)
+ configure_error_handlers(app)
+ init_app(app)
+
+ for blueprint in [main]:
+ app.register_blueprint(blueprint)
+
+ return app
+
+
+def configure_app(app):
+ app.config.from_pyfile('../config.cfg')
+
+ # http://flask.pocoo.org/docs/0.10/errorhandling/
+ if not app.debug:
+ import logging
+ from logging.handlers import RotatingFileHandler
+ file_handler = RotatingFileHandler(app.config['LOG_FILE_PATH'])
+ file_handler.setLevel(logging.WARNING)
+ file_handler.setFormatter(logging.Formatter(
+ '%(asctime)s %(levelname)s: %(message)s'
+ '[in %(pathname)s:%(lineno)d]'))
+ app.logger.addHandler(file_handler)
+
+
+def init_app(app):
+ import os
+ @app.before_request
+ def init():
+ g.studies = {}
+ for i, study in enumerate(app.config['STUDIES'].items()):
+ abbr = study[0]
+ g.studies[abbr] = Storage(os.path.join('app', 'static','studies', abbr))
+
+ modules = app.config['STUDIES'][study[0]]
+ # extend module list with git values
+ for module in g.studies[abbr].get_modules():
+ # check if module is already listed
+ if all(map(lambda (k,v): v != module, modules)):
+ slug = module.decode('ascii', errors='ignore')
+ app.config['STUDIES'][study[0]].append((slug, module))
+
+
+## populate Module-List
+#fit = {}
+#for i, study in enumerate(app.config['STUDIES'].items()):
+# abbr = study[0]
+# fit[abbr] = Fit(os.path.join('static','studies',abbr + '.git'))
+#
+# modules = app.config['STUDIES'][study[0]]
+# # extend module list with git values
+# for module in fit[abbr].get_modules():
+# # check if module is already listed
+# if all(map(lambda (k,v): v != module, modules)):
+# slug = module.decode('ascii', errors='ignore')
+# app.config['STUDIES'][study[0]].append((slug, module))
+
+def configure_error_handlers(app):
+ @app.route('/forbidden')
+ @app.errorhandler(400)
+ @app.errorhandler(403)
+ @app.errorhandler(404)
+ def errorhandler(e):
+ return render_template('error.html', error=e), e.code
+