import os.path import json from flask import Flask, render_template from flask.ext.bootstrap import Bootstrap from flask.ext.compress import Compress from werkzeug.contrib.fixers import ProxyFix import gnupg bootstrap = Bootstrap() compress = Compress() config_file = os.path.abspath('config.json') def create_app(): app = Flask(__name__) if not hasattr(app.config, 'from_json'): def from_json(file, silent=True): try: with open(file, encoding='utf-8') as json_file: obj = json.load(json_file) except IOError: if silent: return False raise for key in obj: if key.isupper(): app.config[key] = obj[key] return True app.config.from_json = from_json app.config.from_json(config_file) app.wsgi_app = ProxyFix(app.wsgi_app) bootstrap.init_app(app) compress.init_app(app) from .status.functions import mail mail.init_app(app) from .root.views import root_page app.register_blueprint(root_page) from .api.views import api_page app.register_blueprint(api_page, url_prefix='/api') from .donate.views import donate_page app.register_blueprint(donate_page, url_prefix='/donate') from .status.views import status_page app.register_blueprint(status_page, url_prefix='/status') from .stats.views import stats_page app.register_blueprint(stats_page, url_prefix='/stats') from .log import init_logging init_logging(app) if 'ENNSTATUS_GPG_HOME' in app.config: gpg = gnupg.GPG(gnupghome=app.config['ENNSTATUS_GPG_HOME']) gpg.encoding = 'utf-8' app.extensions['gnupg'] = gpg else: app.extensions['gnupg'] = False @app.errorhandler(404) def page_not_found(e): return render_template('errorpages/404.html') return app