diff --git a/redash/__init__.py b/redash/__init__.py index 457e18f5ae..9c18cd5497 100644 --- a/redash/__init__.py +++ b/redash/__init__.py @@ -91,7 +91,7 @@ def to_url(self, value): def create_app(load_admin=True): - from redash import handlers + from redash import extensions, handlers from redash.handlers.webpack import configure_webpack from redash.admin import init_admin from redash.models import db @@ -137,5 +137,5 @@ def create_app(load_admin=True): limiter.init_app(app) handlers.init_app(app) configure_webpack(app) - + extensions.init_extensions(app) return app diff --git a/redash/extensions.py b/redash/extensions.py new file mode 100644 index 0000000000..78125842d3 --- /dev/null +++ b/redash/extensions.py @@ -0,0 +1,14 @@ +from pkg_resources import iter_entry_points + + +def init_extensions(app): + """ + Load the Redash extensions for the given Redash Flask app. + """ + if not hasattr(app, 'redash_extensions'): + app.redash_extensions = {} + + for entry_point in iter_entry_points('redash.extensions'): + app.logger.info('Loading Redash extension %s.', entry_point.name) + extension = entry_point.load() + app.redash_extensions[entry_point.name] = extension(app)