Source code for mini_wiki

from flask import Flask, render_template
from flask.ext.bootstrap import Bootstrap
from flask.ext.mail import Mail
from flask.ext.sqlalchemy import SQLAlchemy
from flask.ext.login import LoginManager
import jinja2

# Versioneer
from ._version import get_versions
_version = get_versions()['version']
__version__ = _version.split('+')[0]
del get_versions


bootstrap = Bootstrap()
mail = Mail()
db = SQLAlchemy()
login_manager = LoginManager()
login_manager.session_protection = 'strong'
login_manager.login_view = 'auth.login'

[docs]def create_app(conf): """ A factory function for creating Flask apps given a configuration dictionary. The factory will initialise all Flask plugins, as well as change the template directory and load all blueprints. The factory function also sets up logging and adds the `wiki` variable to the template globals. """ app = Flask(__name__) app.config.update(conf) # Tell flask to get all templates from our template dir my_loader = jinja2.ChoiceLoader([ app.jinja_loader, jinja2.FileSystemLoader(conf['TEMPLATE_DIR']), ]) app.jinja_loader = my_loader bootstrap.init_app(app) mail.init_app(app) db.init_app(app) login_manager.init_app(app) # Attach routes and custom error pages from .main import main as main_blueprint app.register_blueprint(main_blueprint) from .auth import auth as auth_blueprint app.register_blueprint(auth_blueprint) from .pages import pages as pages_blueprint app.register_blueprint(pages_blueprint, url_prefix='/pages') import logging from logging.handlers import RotatingFileHandler file_handler = RotatingFileHandler( app.config.get('LOG_FILE'), maxBytes=1024 * 1024 * 100, backupCount=20) file_handler.setLevel(logging.INFO) formatter = logging.Formatter( "%(asctime)s - %(name)s - %(levelname)s: %(message)s", datefmt='%Y/%m/%d %I:%M:%S %p') file_handler.setFormatter(formatter) app.logger.addHandler(file_handler) # Catch the requests behind the scenes from werkzeug logger = logging.getLogger('werkzeug') logger.addHandler(file_handler) # Inject the app metadata into all our templates app.jinja_env.globals['wiki'] = conf['METADATA'] return app