2018-09-10 09:55:26 -07:00
|
|
|
# -*- coding: utf-8 -*-
|
|
|
|
"""The app module, containing the app factory function."""
|
2019-01-22 21:35:22 -08:00
|
|
|
import sentry_sdk
|
2018-09-10 09:55:26 -07:00
|
|
|
from flask import Flask
|
|
|
|
from flask_cors import CORS
|
2018-12-14 11:36:22 -08:00
|
|
|
from flask_security import SQLAlchemyUserDatastore
|
2019-01-22 21:35:22 -08:00
|
|
|
from flask_sslify import SSLify
|
2019-01-30 09:59:15 -08:00
|
|
|
from grant import commands, proposal, user, comment, milestone, admin, email, blockchain, task, rfp
|
2019-01-10 15:48:11 -08:00
|
|
|
from grant.extensions import bcrypt, migrate, db, ma, security
|
2018-11-21 21:45:29 -08:00
|
|
|
from grant.settings import SENTRY_RELEASE, ENV
|
2019-01-22 21:35:22 -08:00
|
|
|
from sentry_sdk.integrations.flask import FlaskIntegration
|
2018-09-10 09:55:26 -07:00
|
|
|
|
|
|
|
|
2018-11-28 13:56:19 -08:00
|
|
|
def create_app(config_objects=["grant.settings"]):
|
2018-09-10 09:55:26 -07:00
|
|
|
app = Flask(__name__.split(".")[0])
|
2018-11-28 13:56:19 -08:00
|
|
|
for conf in config_objects:
|
|
|
|
app.config.from_object(conf)
|
2018-11-07 11:08:42 -08:00
|
|
|
app.url_map.strict_slashes = False
|
2018-09-10 09:55:26 -07:00
|
|
|
register_extensions(app)
|
|
|
|
register_blueprints(app)
|
|
|
|
register_shellcontext(app)
|
|
|
|
register_commands(app)
|
2018-11-28 13:56:19 -08:00
|
|
|
if not app.config.get("TESTING"):
|
|
|
|
sentry_sdk.init(
|
|
|
|
environment=ENV,
|
|
|
|
release=SENTRY_RELEASE,
|
|
|
|
integrations=[FlaskIntegration()]
|
|
|
|
)
|
2018-09-10 09:55:26 -07:00
|
|
|
return app
|
|
|
|
|
|
|
|
|
|
|
|
def register_extensions(app):
|
|
|
|
"""Register Flask extensions."""
|
|
|
|
bcrypt.init_app(app)
|
|
|
|
db.init_app(app)
|
|
|
|
migrate.init_app(app, db)
|
|
|
|
ma.init_app(app)
|
2018-12-14 11:36:22 -08:00
|
|
|
user_datastore = SQLAlchemyUserDatastore(db, user.models.User, user.models.Role)
|
2019-01-18 11:07:00 -08:00
|
|
|
security.init_app(app, datastore=user_datastore, register_blueprint=False)
|
2018-12-05 15:49:45 -08:00
|
|
|
|
2018-12-14 11:36:22 -08:00
|
|
|
# supports_credentials for session cookies
|
|
|
|
CORS(app, supports_credentials=True)
|
2018-12-05 15:49:45 -08:00
|
|
|
SSLify(app)
|
2018-09-10 09:55:26 -07:00
|
|
|
return None
|
|
|
|
|
|
|
|
|
|
|
|
def register_blueprints(app):
|
|
|
|
"""Register Flask blueprints."""
|
|
|
|
app.register_blueprint(comment.views.blueprint)
|
|
|
|
app.register_blueprint(proposal.views.blueprint)
|
2018-09-25 13:09:25 -07:00
|
|
|
app.register_blueprint(user.views.blueprint)
|
2018-09-10 09:55:26 -07:00
|
|
|
app.register_blueprint(milestone.views.blueprint)
|
2018-10-30 09:35:47 -07:00
|
|
|
app.register_blueprint(admin.views.blueprint)
|
2018-11-02 09:07:06 -07:00
|
|
|
app.register_blueprint(email.views.blueprint)
|
2019-01-21 09:51:49 -08:00
|
|
|
app.register_blueprint(blockchain.views.blueprint)
|
2019-01-27 20:59:15 -08:00
|
|
|
app.register_blueprint(task.views.blueprint)
|
2019-01-30 09:59:15 -08:00
|
|
|
app.register_blueprint(rfp.views.blueprint)
|
2018-09-10 09:55:26 -07:00
|
|
|
|
2018-10-19 22:18:27 -07:00
|
|
|
|
2018-09-10 09:55:26 -07:00
|
|
|
def register_shellcontext(app):
|
|
|
|
"""Register shell context objects."""
|
|
|
|
|
|
|
|
def shell_context():
|
|
|
|
"""Shell context objects."""
|
|
|
|
return {"db": db}
|
|
|
|
|
|
|
|
app.shell_context_processor(shell_context)
|
|
|
|
|
|
|
|
|
|
|
|
def register_commands(app):
|
|
|
|
"""Register Click commands."""
|
|
|
|
app.cli.add_command(commands.test)
|
|
|
|
app.cli.add_command(commands.lint)
|
|
|
|
app.cli.add_command(commands.clean)
|
|
|
|
app.cli.add_command(commands.urls)
|
|
|
|
|
|
|
|
app.cli.add_command(proposal.commands.create_proposal)
|
2019-02-05 12:34:19 -08:00
|
|
|
app.cli.add_command(proposal.commands.create_proposals)
|
2018-11-02 09:07:06 -07:00
|
|
|
app.cli.add_command(user.commands.delete_user)
|
2019-01-16 21:20:10 -08:00
|
|
|
app.cli.add_command(admin.commands.gen_admin_auth)
|
2019-01-27 20:59:15 -08:00
|
|
|
app.cli.add_command(task.commands.create_task)
|