Source code for quizApp
"""Handle creating the app and configuring it.
"""
from __future__ import print_function
from __future__ import unicode_literals
from flask import Flask
from flask_mail import Mail
from flask_migrate import Migrate
from flask_security import Security, SQLAlchemyUserDatastore
from flask_security.signals import user_registered
from flask_sqlalchemy import SQLAlchemy
from flask_wtf.csrf import CsrfProtect
from quizApp import config
db = SQLAlchemy()
csrf = CsrfProtect()
security = Security()
migrate = Migrate()
mail = Mail()
[docs]def create_app(config_name, overrides=None):
"""Create and return an instance of this application.
"""
app = Flask(__name__, instance_relative_config=True)
app.config.from_object(config.configs[config_name])
app.config.from_pyfile("instance_config.py", silent=True)
if overrides:
app.config.from_mapping(overrides)
print("Using config: " + config_name)
db.init_app(app)
csrf.init_app(app)
mail.init_app(app)
from quizApp.models import User, Role
user_datastore = SQLAlchemyUserDatastore(db, User, Role)
security.init_app(app, user_datastore)
# Workaround for flask-security bug #383
security.datastore = user_datastore
security.app = app
migrate.init_app(app, db)
from quizApp.views.activities import activities
from quizApp.views.core import core
from quizApp.views.datasets import datasets
from quizApp.views.experiments import experiments
from quizApp.views.data import data
from quizApp.views.mturk import mturk
from quizApp.filters import filters
app.register_blueprint(activities)
app.register_blueprint(data)
app.register_blueprint(core)
app.register_blueprint(datasets)
app.register_blueprint(experiments)
app.register_blueprint(mturk)
app.register_blueprint(filters)
user_registered.connect(apply_default_user_role, app)
return app
[docs]def apply_default_user_role(_, user, **__):
"""When a new user is registered, make them a participant.
"""
user.type = "participant"
security.datastore.add_role_to_user(user, "participant")
db.session.commit()