ogn-python/app/__init__.py

62 wiersze
1.5 KiB
Python

import os
from flask import Flask
from flask_bootstrap import Bootstrap
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate
from flask_caching import Cache
from celery import Celery
from flask_redis import FlaskRedis
from config import configs
bootstrap = Bootstrap()
db = SQLAlchemy()
migrate = Migrate()
cache = Cache()
redis_client = FlaskRedis()
celery = Celery()
def create_app(config_name='default'):
# Initialize Flask
app = Flask(__name__)
# Load the configuration
configuration = configs[config_name]
app.config.from_object(configuration)
app.config.from_envvar("OGN_CONFIG_MODULE", silent=True)
# Initialize other things
bootstrap.init_app(app)
db.init_app(app)
migrate.init_app(app, db)
cache.init_app(app)
redis_client.init_app(app)
init_celery(app)
register_blueprints(app)
return app
def register_blueprints(app):
from app.main import bp as bp_main
app.register_blueprint(bp_main)
def init_celery(app=None):
app = app or create_app(os.getenv('FLASK_CONFIG') or 'default')
celery.conf.broker_url = app.config['BROKER_URL']
celery.conf.result_backend = app.config['CELERY_RESULT_BACKEND']
celery.conf.update(app.config)
class ContextTask(celery.Task):
"""Make celery tasks work with Flask app context"""
def __call__(self, *args, **kwargs):
with app.app_context():
return self.run(*args, **kwargs)
celery.Task = ContextTask
return celery