from celery import Celery from flask import current_app from flask_limiter import Limiter from flask_limiter.util import get_remote_address from flask_static_digest import FlaskStaticDigest from flask_wtf.csrf import CSRFProtect from redis import Redis from werkzeug.local import LocalProxy from core_notifications_client import CoreNotificationsClient from atlas_um.analytics.amplitude import Amplitude from atlas_um.auth import AuthManager from atlas_um.auth0.client import Auth0Client from atlas_um.caching.ext import Cache from atlas_um.pgdb import pgdb from atlas_um.usm.client import USMClient auth_manager = AuthManager() auth0 = Auth0Client() usm = USMClient() limiter = Limiter(key_func=get_remote_address) flask_static_digest = FlaskStaticDigest() amplitude = Amplitude() redis = LocalProxy(lambda: current_app.extensions["redis"]) csrf = CSRFProtect() notifications = CoreNotificationsClient() celery = Celery(__name__) cache = Cache() def register_extensions(app): auth0.init_app(app) pgdb.init_app(app) usm.init_app(app) limiter.init_app(app) auth_manager.init_app(app) flask_static_digest.init_app(app) amplitude.init_app(app) notifications.init_app(app) init_redis(app) csrf.init_app(app) cache.init_app(app) init_celery(app) def init_redis(app): url = app.config.get("REDIS_URL") if url: app.extensions["redis"] = Redis.from_url(url, decode_responses=True) app.extensions["redis"].ping() else: app.extensions["redis"] = Redis(decode_responses=True) def init_celery(app): celery.conf.update(app.config["CELERY"], imports=["atlas_um.tasks"])