diff options
Diffstat (limited to 'app/__init__.py')
-rw-r--r-- | app/__init__.py | 78 |
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 + |