def setUp(self): app.config['TESTING'] = True app.config['WTF_CSRF_ENABLED'] = False app.config['DEBUG'] = False self.app = app.test_client() mail.init_app(app) self.assertEqual(app.debug, False)
def update_mail_config(): from manager import app from app.function.config import get_config app.config.update( MAIL_SERVER=get_config("web_mail_smtp_host"), MAIL_PORT=get_config("web_mail_smtp_port"), MAIL_USERNAME=get_config("web_mail_smtp_user"), MAIL_PASSWORD=get_config("web_mail_smtp_pass") ) mail.init_app(app)
def setUp(self): app.config['TESTING'] = True app.config['WTF_CSRF_ENABLED'] = False app.config['DEBUG'] = False app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///' + os.path.join(app.config['BASEDIR'], TEST_DB) self.app = app.test_client() db.drop_all() db.create_all() mail.init_app(app) self.assertEquals(app.debug, False)
def setUp(self): app.config['TESTING'] = True app.config['WTF_CSRF_ENABLED'] = False app.config['DEBUG'] = False app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///' + \ os.path.join(basedir, TEST_DB) self.app = app.test_client() db.create_all() # Disable sending emails during unit testing mail.init_app(app) self.assertEqual(app.debug, False)
def app(): """ Returns flask app with context for testing. """ app = create_app() app.config["WTF_CSRF_ENABLED"] = False app.config["TESTING"] = True _mail.init_app(app) ctx = app.app_context() ctx.push() yield app ctx.pop()
def setUp(self): app = create_app(TestingConfig) self.app = app.test_client() ## IMPORTANT FOR LOGIN ## app.test_request_context().push() db.session.remove() db.drop_all() db.create_all() self.add_admin() self.add_test_forum() self.add_test_quiz_edu() self.add_test_question() # Disable sending emails during unit testing mail.init_app(app) self.assertEqual(app.debug, False)
def create_app(): app = Flask(__name__, template_folder="templates", static_folder="assets") app.config.from_object(config_map[os.environ.get("FLASK_ENV", "production")]) breadcrumbs.init_app(app) db.init_app(app) mail.init_app(app) migrate.init_app(app, db) login_manager.init_app(app) login_manager.login_message = None login_manager.login_view = ".start_page" app.register_blueprint(main_blueprint) app.logger.setLevel(app.config.get("LOG_LEVEL", LOGLEVEL_WARNING)) print(app.logger) return app
def setUp(self): """ initial unit testing setup disabling WTF_CSRF for form submission requests test db creation """ app.config['TESTING'] = True app.config['WTF_CSRF_ENABLED'] = False app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///' + os.path.join( basedir, 'test.db') app.config['S3_BUCKET'] = 'segarage_test' Paper.__tablename__ = 'papers_test' self.app = app.test_client() db.create_all() # Disable send email functionality for unit testing mail.init_app(app) self.assertEqual(app.debug, False)
def create_app(): ''' Create an instance of the app. ''' app = Flask(__name__, template_folder="templates") ordbok = FlaskOrdbok(app) ordbok.load() app.config.update(ordbok) #app.config.update(config or {}) app.register_blueprint(views) babel.init_app(app) cache.init_app(app) csrf.init_app(app) mail.init_app(app) bcrypt.init_app(app) #security.init_app(app, bcrypt) s3.init_app(app) configure_uploads(app, (photos)) # Setup Flask-Security user_datastore = SQLAlchemyUserDatastore(db, User, Role) security.init_app(app, datastore=user_datastore) db.init_app(app) #login_manager.init_app(app) assets.init_app(app) app.jinja_env.filters['slug'] = lambda x: slugify(x).lower() app.jinja_env.filters['noop'] = lambda x: '' # Constant that should be available for all templates. app.jinja_env.globals['ORG_TYPES'] = ORG_TYPES app.jinja_env.globals['CONTENT'] = CONTENT app.jinja_env.globals['NOI_COLORS'] = NOI_COLORS app.jinja_env.globals['LEVELS'] = LEVELS app.jinja_env.globals['DOMAINS'] = DOMAINS app.jinja_env.globals['QUESTIONS_BY_ID'] = QUESTIONS_BY_ID return app
def create_app(Config = None): """Flask app factory function.""" app = Flask(__name__) app.wsgi_app = HTTPMethodOverrideMiddleware(app.wsgi_app) if not Config: Config = DefaultConfig if not app.debug else DebugConfig app.config.from_object(Config) register_blueprints(app) models.init_app(app) routes.init_app(app) templates.init_app(app) mail.init_app(app) if not app.testing: logger.init_app(app) if app.debug: debug.init_app(app) return app
def send_email(subject, sender, recipients, text_body, html_body, attachments=None, sync=False): msg = Message(subject, sender=sender, recipients=recipients) msg.body = text_body msg.html = html_body if attachments: for attachment in attachments: msg.attach(*attachment) if sync: if mail.app is None: mail.init_app(current_app) print(current_app.config['MAIL_SERVER']) mail.send(msg) else: Thread(target=send_async_email, args=(current_app._get_current_object(), msg)).start()
def client(): db_fd, app.config['DATABASE'] = tempfile.mkstemp() app.config['TESTING'] = True app.config['DEBUG'] = True app.config['UPLOAD_FOLDER'] = os.path.join(dir_path, tempfile.mkdtemp()) # Disable CSRF for testing app.config['CSRF_METHODS'] = [] # No Recaptcha app.config['RECAPTCHA_ENABLED'] = False # Initialize the mailer with the debug config mail.init_app(app) client = app.test_client() with app.app_context(): db.init_db() db.seed_test_db() yield client os.close(db_fd) os.unlink(app.config['DATABASE'])
from flask import Flask from app import mail app = Flask(__name__, template_folder='template') app.config.from_object(__name__) app.secret_key = 'development key' app.config["MAIL_SERVER"] = "smtp.gmail.com" app.config["MAIL_PORT"] = 465 app.config["MAIL_USE_SSL"] = True app.config["MAIL_USERNAME"] = '******' app.config["MAIL_PASSWORD"] = '******' mail.init_app(app)
def init_extensions(app): """ 初始化第三方插件 :return: """ # flask-MongoEngine db.init_app(app) db.connection(**app.config.get('ORDER_DB_CONFIG')) db.connection(**app.config.get('INVENTORY_DB_CONFIG')) db.connection(**app.config.get('CART_DB_CONFIG')) db.connection(**app.config.get('CONTENT_DB_CONFIG')) db.connection(**app.config.get('LOG_DB_CONFIG')) mongo_inventory.init_app(app, config_prefix='MONGO_INVENTORY') redis.connection_pool = ConnectionPool(**app.config.get('REDIS_CONFIG')) session_redis.connection_pool = ConnectionPool( **app.config.get('SESSION_REDIS')) # server side session app.session_interface = RedisSessionInterface(session_redis) # flask-script migrate.init_app(app, db) # flask-mail mail.init_app(app) # flask-cache cache.init_app(app) # flask-admin admin.init_app(app) # flask-bcrypt bcrypt.init_app(app) # flask-babel babel.init_app(app) # flask-toolbar toolbar.init_app(app) # flask-assets assets.init_app(app) login_manager.login_view = 'frontend.login' # login_manager.refresh_view = 'frontend.reauth' @login_manager.user_loader def load_user(id): """ :param id: :return: """ return User.objects(id=id, is_deleted=False).first() login_manager.init_app(app) login_manager.login_message = gettext('Please login to access this page.') login_manager.needs_refresh_message = gettext( 'Please reauthenticate to access this page.') # flask-principal principal.init_app(app) from flask_principal import identity_loaded @identity_loaded.conect_via(app) def on_identity_loaded(sender, identity): """ :param sender: :param identity: :return: """ principal_on_identity_loaded(sender, identity)
import os, random, string, subprocess from subprocess import call from flask import render_template, flash, redirect, url_for, request, session, g from flask.ext.login import login_user, logout_user, current_user, login_required from app import appHandler, login_manager, db, mail from .forms import LoginForm, RegistrationForm, ChangePasswordForm from models import User, Logs, PrintLogs, Printers, Files from werkzeug import secure_filename, check_password_hash, generate_password_hash from flask import send_from_directory from flask_mail import Message mail.init_app(appHandler) ALLOWED_EXTENSIONS = set(['txt', 'pdf']) login_manager.login_view = "login" def allowed_file(filename): return '.' in filename and \ filename.rsplit('.',1)[1] in ALLOWED_EXTENSIONS @login_manager.user_loader def load_user(id): return User.query.get(int(id)) @appHandler.before_request def before_request(): g.user = current_user
def setUp(self): self.db_fd, app.config['DATABASE'] = tempfile.mkstemp() app.config['TESTING'] = True self.app = app.test_client() mail.init_app(app)
from app import app from db import db from app import mail db.init_app(app) mail.init_app(app) @app.before_first_request def create_tables(): db.create_all()
def create_app(): ''' Create an instance of the app. ''' app = Flask(__name__) with open('/noi/app/config/config.yml', 'r') as config_file: app.config.update(yaml.load(config_file)) app.config['CELERYBEAT_SCHEDULE'] = CELERYBEAT_SCHEDULE with open('/noi/app/config/local_config.yml', 'r') as config_file: app.config.update(yaml.load(config_file)) app.register_blueprint(views) babel.init_app(app) cache.init_app(app) csrf.init_app(app) mail.init_app(app) bcrypt.init_app(app) #security.init_app(app, bcrypt) s3.init_app(app) #configure_uploads(app, (photos)) # Setup Flask-Security user_datastore = SQLAlchemyUserDatastore(db, User, Role) security.init_app(app, datastore=user_datastore, confirm_register_form=EmailRestrictRegisterForm) db.init_app(app) alchemydumps.init_app(app, db) #login_manager.init_app(app) assets.init_app(app) app.jinja_env.filters['slug'] = lambda x: slugify(x).lower() app.jinja_env.filters['noop'] = lambda x: '' noi_deploy = app.config.get('NOI_DEPLOY') if not noi_deploy: app.logger.warn('No NOI_DEPLOY found in config, deploy-specific ' 'attributes like the About page and logos will be ' 'missing.') # Constant that should be available for all templates. app.jinja_env.globals['ORG_TYPES'] = ORG_TYPES app.jinja_env.globals['QUESTIONNAIRES'] = QUESTIONNAIRES app.jinja_env.globals['NOI_COLORS'] = NOI_COLORS app.jinja_env.globals['LEVELS'] = LEVELS app.jinja_env.globals['QUESTIONS_BY_ID'] = QUESTIONS_BY_ID with open('/noi/app/data/about.yaml') as about_yaml: app.jinja_env.globals['ABOUT'] = yaml.load(about_yaml).get(noi_deploy) if not app.config.get('MAIL_USERNAME') or not app.config.get( 'MAIL_PASSWORD'): app.logger.warn('No MAIL_SERVER found in config, password reset will ' 'not work.') if not app.config.get('GA_TRACKING_CODE'): app.logger.warn('No GA_TRACKING_CODE found in config, analytics will' ' not work.') return app
def create_app(config=None): #pylint: disable=too-many-statements ''' Create an instance of the app. ''' app = Flask(__name__) with open('/noi/app/config/config.yml', 'r') as config_file: app.config.update(yaml.load(config_file)) app.config['CELERYBEAT_SCHEDULE'] = CELERYBEAT_SCHEDULE if config is None: try: with open('/noi/app/config/local_config.yml', 'r') as config_file: app.config.update(yaml.load(config_file)) except IOError: app.logger.warn("No local_config.yml file") else: app.config.update(config) # If we control emails with a Regex, we have to confirm email. if 'EMAIL_REGEX' in app.config: app.config['SECURITY_CONFIRMABLE'] = True else: app.config['SECURITY_CONFIRMABLE'] = False with open('/noi/app/data/deployments.yaml') as deployments_yaml: deployments = yaml.load(deployments_yaml) app.register_blueprint(views) cache.init_app(app) csrf.init_app(app) mail.init_app(app) bcrypt.init_app(app) s3.init_app(app) #configure_uploads(app, (photos)) # Setup Flask-Security user_datastore = DeploySQLAlchemyUserDatastore(db, User, Role) security.init_app(app, datastore=user_datastore, confirm_register_form=EmailRestrictRegisterForm) db.init_app(app) alchemydumps.init_app(app, db) #login_manager.init_app(app) assets.init_app(app) app.jinja_env.filters['slug'] = lambda x: slugify(x).lower() noi_deploy = app.config['NOI_DEPLOY'] if noi_deploy == '_default': app.logger.warn('No NOI_DEPLOY found in config, deploy-specific ' 'attributes like the About page, custom domains and ' 'logos will be missing.') this_deployment = deployments.get(noi_deploy, deployments['_default']) default_deployment = deployments['_default'] if 'locale' in this_deployment: app.config['BABEL_DEFAULT_LOCALE'] = this_deployment['locale'] app.config['SEARCH_DEPLOYMENTS'] = this_deployment.get('searches', []) or [] app.config['SEARCH_DEPLOYMENTS'].append(noi_deploy) babel.init_app(app) app.config['DOMAINS'] = this_deployment.get('domains', default_deployment['domains']) # Constant that should be available for all templates. app.jinja_env.globals['NOI_DEPLOY'] = noi_deploy app.jinja_env.globals['ORG_TYPES'] = ORG_TYPES app.jinja_env.globals['NOI_COLORS'] = NOI_COLORS app.jinja_env.globals['LEVELS'] = LEVELS app.jinja_env.globals['QUESTIONS_BY_ID'] = QUESTIONS_BY_ID app.jinja_env.globals['ABOUT'] = this_deployment.get('about', default_deployment['about']) if not app.config.get('MAIL_USERNAME') or not app.config.get('MAIL_PASSWORD'): app.logger.warn('No MAIL_SERVER found in config, password reset will ' 'not work.') if not app.config.get('GA_TRACKING_CODE'): app.logger.warn('No GA_TRACKING_CODE found in config, analytics will' ' not work.') # Order questionnaires for deployments that want custom order. questionnaire_order = this_deployment.get('questions', default_deployment['questions']) if questionnaire_order: new_order = [] for topic in questionnaire_order: if isinstance(topic, basestring): q_id = topic custom_description = None else: q_id = topic.keys()[0] custom_description = topic[q_id].get('description') try: questionnaire = [q for q in QUESTIONNAIRES if q['id'] == q_id][0] if custom_description: questionnaire['description'] = custom_description new_order.append(questionnaire) #new_order.append(filter(lambda q: q['id'] == q_id, QUESTIONNAIRES)[0]) except IndexError: raise Exception('Cannot find questionairre ID "{}", aborting'.format( q_id)) app.jinja_env.globals['QUESTIONNAIRES'] = new_order else: app.jinja_env.globals['QUESTIONNAIRES'] = QUESTIONNAIRES # Signals @user_registered.connect_via(app) def add_deployment_role(sender, **kwargs): """ Add role for this deployment whenever a new user registers. """ user = kwargs['user'] try: role = Role.query.filter_by(name=sender.config['NOI_DEPLOY']).one() except NoResultFound: role = Role(name=sender.config['NOI_DEPLOY']) db.session.add(role) user.roles.append(role) db.session.add(user) db.session.commit() return app
def create_app(config=None): #pylint: disable=too-many-statements ''' Create an instance of the app. ''' app = Flask(__name__) with open('/noi/app/config/config.yml', 'r') as config_file: app.config.update(yaml.load(config_file)) if config is None: try: with open('/noi/app/config/local_config.yml', 'r') as config_file: app.config.update(yaml.load(config_file)) except IOError: app.logger.warn("No local_config.yml file") configure_from_os_environment(app.config) else: app.config.update(config) # Confirming email is currently unsupported. app.config['SECURITY_CONFIRMABLE'] = False with open('/noi/app/data/deployments.yaml') as deployments_yaml: deployments = yaml.load(deployments_yaml) l10n.configure_app(app) app.register_blueprint(views) if app.config['DEBUG']: app.register_blueprint(style_guide.views) try: from flask_debugtoolbar import DebugToolbarExtension debug_toolbar = DebugToolbarExtension(app) except: app.logger.exception('Initialization of Flask-DebugToolbar ' 'failed.') if not app.config['DEBUG'] and app.config.get('ADMINS'): email_errors.init_app(app) oauth.init_app(app) if 'LINKEDIN' in app.config: app.jinja_env.globals['LINKEDIN_ENABLED'] = True app.register_blueprint(linkedin.views) cache.init_app(app) csrf.init_app(app) mail.init_app(app) bcrypt.init_app(app) s3.init_app(app) # Setup Flask-Security user_datastore = DeploySQLAlchemyUserDatastore(db, User, Role) security.init_app(app, datastore=user_datastore, login_form=NOILoginForm, register_form=NOIRegisterForm, forgot_password_form=NOIForgotPasswordForm, reset_password_form=NOIResetPasswordForm, change_password_form=NOIChangePasswordForm) db.init_app(app) alchemydumps.init_app(app, db) #login_manager.init_app(app) assets.init_app(app) app.jinja_env.filters['slug'] = lambda x: slugify(x).lower() noi_deploy = app.config['NOI_DEPLOY'] if noi_deploy == '_default': app.logger.warn('No NOI_DEPLOY found in config, deploy-specific ' 'attributes like the About page, custom domains and ' 'logos will be missing.') this_deployment = deployments.get(noi_deploy, deployments['_default']) default_deployment = deployments['_default'] if 'locale' in this_deployment: app.config['BABEL_DEFAULT_LOCALE'] = this_deployment['locale'] app.config['SEARCH_DEPLOYMENTS'] = this_deployment.get('searches', []) or [] app.config['SEARCH_DEPLOYMENTS'].append(noi_deploy) babel.init_app(app) l10n.init_app(app) admin.init_app(app) app.config['DOMAINS'] = this_deployment.get('domains', default_deployment['domains']) app.config['CONTACT_FORM_ID'] = this_deployment.get( 'contact_form_id', default_deployment['contact_form_id']) # Constants that should be available for all templates. global_config_json = {} for exposed_var in EXPOSED_APP_CONFIG_VARS: if exposed_var in app.config: global_config_json[exposed_var] = app.config[exposed_var] global_config_json = json.dumps(global_config_json) app.jinja_env.globals['global_config_json'] = global_config_json app.jinja_env.globals['get_locale'] = get_locale app.jinja_env.globals['get_nopic_avatar'] = get_nopic_avatar app.jinja_env.globals['NOI_DEPLOY'] = noi_deploy app.jinja_env.globals['ORG_TYPES'] = ORG_TYPES app.jinja_env.globals['NOI_COLORS'] = NOI_COLORS app.jinja_env.globals['LEVELS'] = LEVELS app.jinja_env.globals['LEVELS_BY_SCORE'] = LEVELS_BY_SCORE app.jinja_env.globals['QUESTIONS_BY_ID'] = QUESTIONS_BY_ID app.jinja_env.globals['QUESTIONNAIRES_BY_ID'] = QUESTIONNAIRES_BY_ID app.jinja_env.globals['ABOUT'] = this_deployment.get( 'about', default_deployment['about']) if not app.config.get('MAIL_SERVER'): app.logger.warn('No MAIL_SERVER found in config, password reset will ' 'not work.') if not app.config.get('GA_TRACKING_CODE'): app.logger.warn('No GA_TRACKING_CODE found in config, analytics will' ' not work.') # Order questionnaires for deployments that want custom order. questionnaire_order = this_deployment.get('questions', default_deployment['questions']) if questionnaire_order: new_order = [] for topic in questionnaire_order: if isinstance(topic, basestring): q_id = topic custom_description = None else: q_id = topic.keys()[0] custom_description = topic[q_id].get('description') try: questionnaire = [q for q in QUESTIONNAIRES if q['id'] == q_id][0] if custom_description: questionnaire['description'] = custom_description new_order.append(questionnaire) #new_order.append(filter(lambda q: q['id'] == q_id, QUESTIONNAIRES)[0]) except IndexError: raise Exception( 'Cannot find questionairre ID "{}", aborting'.format(q_id)) app.jinja_env.globals['QUESTIONNAIRES'] = new_order else: app.jinja_env.globals['QUESTIONNAIRES'] = QUESTIONNAIRES # Signals @user_registered.connect_via(app) def add_deployment_role(sender, **kwargs): """ Add role for this deployment whenever a new user registers. """ user = kwargs['user'] try: role = Role.query.filter_by(name=sender.config['NOI_DEPLOY']).one() except NoResultFound: role = Role(name=sender.config['NOI_DEPLOY']) db.session.add(role) user.roles.append(role) db.session.add(user) db.session.commit() sass.init_app(app) csp.init_app(app) if app.config.get('BASIC_AUTH_FORCE'): from flask.ext.basicauth import BasicAuth basic_auth = BasicAuth() basic_auth.init_app(app) app.wsgi_app = ProxyFix(app.wsgi_app) return app
def create_app(config=None): #pylint: disable=too-many-statements ''' Create an instance of the app. ''' app = Flask(__name__) with open('/noi/app/config/config.yml', 'r') as config_file: app.config.update(yaml.load(config_file)) app.config['CELERYBEAT_SCHEDULE'] = CELERYBEAT_SCHEDULE if config is None: try: with open('/noi/app/config/local_config.yml', 'r') as config_file: app.config.update(yaml.load(config_file)) except IOError: app.logger.warn("No local_config.yml file") else: app.config.update(config) # Confirming email is currently unsupported. app.config['SECURITY_CONFIRMABLE'] = False with open('/noi/app/data/deployments.yaml') as deployments_yaml: deployments = yaml.load(deployments_yaml) l10n.configure_app(app) app.register_blueprint(views) if app.config['DEBUG']: app.register_blueprint(style_guide.views) try: from flask_debugtoolbar import DebugToolbarExtension debug_toolbar = DebugToolbarExtension(app) except: app.logger.exception('Initialization of Flask-DebugToolbar ' 'failed.') if not app.config['DEBUG'] and app.config.get('ADMINS'): email_errors.init_app(app) cache.init_app(app) csrf.init_app(app) mail.init_app(app) bcrypt.init_app(app) s3.init_app(app) #configure_uploads(app, (photos)) # Setup Flask-Security user_datastore = DeploySQLAlchemyUserDatastore(db, User, Role) security.init_app(app, datastore=user_datastore, login_form=NOILoginForm, register_form=NOIRegisterForm, forgot_password_form=NOIForgotPasswordForm, reset_password_form=NOIResetPasswordForm, change_password_form=NOIChangePasswordForm) db.init_app(app) alchemydumps.init_app(app, db) #login_manager.init_app(app) assets.init_app(app) app.jinja_env.filters['slug'] = lambda x: slugify(x).lower() noi_deploy = app.config['NOI_DEPLOY'] if noi_deploy == '_default': app.logger.warn('No NOI_DEPLOY found in config, deploy-specific ' 'attributes like the About page, custom domains and ' 'logos will be missing.') this_deployment = deployments.get(noi_deploy, deployments['_default']) default_deployment = deployments['_default'] if 'locale' in this_deployment: app.config['BABEL_DEFAULT_LOCALE'] = this_deployment['locale'] app.config['SEARCH_DEPLOYMENTS'] = this_deployment.get('searches', []) or [] app.config['SEARCH_DEPLOYMENTS'].append(noi_deploy) babel.init_app(app) l10n.init_app(app) admin.init_app(app) app.config['DOMAINS'] = this_deployment.get('domains', default_deployment['domains']) app.config['CONTACT_FORM_ID'] = this_deployment.get('contact_form_id', default_deployment['contact_form_id']) # Constants that should be available for all templates. global_config_json = {} for exposed_var in EXPOSED_APP_CONFIG_VARS: if exposed_var in app.config: global_config_json[exposed_var] = app.config[exposed_var] global_config_json = json.dumps(global_config_json) app.jinja_env.globals['global_config_json'] = global_config_json app.jinja_env.globals['get_locale'] = get_locale app.jinja_env.globals['NOI_DEPLOY'] = noi_deploy app.jinja_env.globals['ORG_TYPES'] = ORG_TYPES app.jinja_env.globals['NOI_COLORS'] = NOI_COLORS app.jinja_env.globals['LEVELS'] = LEVELS app.jinja_env.globals['LEVELS_BY_SCORE'] = LEVELS_BY_SCORE app.jinja_env.globals['QUESTIONS_BY_ID'] = QUESTIONS_BY_ID app.jinja_env.globals['QUESTIONNAIRES_BY_ID'] = QUESTIONNAIRES_BY_ID app.jinja_env.globals['ABOUT'] = this_deployment.get('about', default_deployment['about']) if not app.config.get('MAIL_USERNAME') or not app.config.get('MAIL_PASSWORD'): app.logger.warn('No MAIL_SERVER found in config, password reset will ' 'not work.') if not app.config.get('GA_TRACKING_CODE'): app.logger.warn('No GA_TRACKING_CODE found in config, analytics will' ' not work.') # Order questionnaires for deployments that want custom order. questionnaire_order = this_deployment.get('questions', default_deployment['questions']) if questionnaire_order: new_order = [] for topic in questionnaire_order: if isinstance(topic, basestring): q_id = topic custom_description = None else: q_id = topic.keys()[0] custom_description = topic[q_id].get('description') try: questionnaire = [q for q in QUESTIONNAIRES if q['id'] == q_id][0] if custom_description: questionnaire['description'] = custom_description new_order.append(questionnaire) #new_order.append(filter(lambda q: q['id'] == q_id, QUESTIONNAIRES)[0]) except IndexError: raise Exception('Cannot find questionairre ID "{}", aborting'.format( q_id)) app.jinja_env.globals['QUESTIONNAIRES'] = new_order else: app.jinja_env.globals['QUESTIONNAIRES'] = QUESTIONNAIRES # Signals @user_registered.connect_via(app) def add_deployment_role(sender, **kwargs): """ Add role for this deployment whenever a new user registers. """ user = kwargs['user'] try: role = Role.query.filter_by(name=sender.config['NOI_DEPLOY']).one() except NoResultFound: role = Role(name=sender.config['NOI_DEPLOY']) db.session.add(role) user.roles.append(role) db.session.add(user) db.session.commit() sass.init_app(app) csp.init_app(app) if app.config.get('BASIC_AUTH_FORCE'): from flask.ext.basicauth import BasicAuth basic_auth = BasicAuth() basic_auth.init_app(app) return app
def create_app(): ''' Create an instance of the app. ''' app = Flask(__name__) with open('/noi/app/config/config.yml', 'r') as config_file: app.config.update(yaml.load(config_file)) app.config['CELERYBEAT_SCHEDULE'] = CELERYBEAT_SCHEDULE with open('/noi/app/config/local_config.yml', 'r') as config_file: app.config.update(yaml.load(config_file)) app.register_blueprint(views) babel.init_app(app) cache.init_app(app) csrf.init_app(app) mail.init_app(app) bcrypt.init_app(app) #security.init_app(app, bcrypt) s3.init_app(app) #configure_uploads(app, (photos)) # Setup Flask-Security user_datastore = SQLAlchemyUserDatastore(db, User, Role) security.init_app(app, datastore=user_datastore, confirm_register_form=EmailRestrictRegisterForm) db.init_app(app) alchemydumps.init_app(app, db) #login_manager.init_app(app) assets.init_app(app) app.jinja_env.filters['slug'] = lambda x: slugify(x).lower() app.jinja_env.filters['noop'] = lambda x: '' noi_deploy = app.config.get('NOI_DEPLOY') if not noi_deploy: app.logger.warn('No NOI_DEPLOY found in config, deploy-specific ' 'attributes like the About page and logos will be ' 'missing.') # Constant that should be available for all templates. app.jinja_env.globals['ORG_TYPES'] = ORG_TYPES app.jinja_env.globals['QUESTIONNAIRES'] = QUESTIONNAIRES app.jinja_env.globals['NOI_COLORS'] = NOI_COLORS app.jinja_env.globals['LEVELS'] = LEVELS app.jinja_env.globals['QUESTIONS_BY_ID'] = QUESTIONS_BY_ID with open('/noi/app/data/about.yaml') as about_yaml: app.jinja_env.globals['ABOUT'] = yaml.load(about_yaml).get(noi_deploy) if not app.config.get('MAIL_USERNAME') or not app.config.get('MAIL_PASSWORD'): app.logger.warn('No MAIL_SERVER found in config, password reset will ' 'not work.') if not app.config.get('GA_TRACKING_CODE'): app.logger.warn('No GA_TRACKING_CODE found in config, analytics will' ' not work.') return app