Browse Source

Set correct alembic version location for plugins

Peter Justin 7 years ago
parent
commit
6a1ebc23bf
4 changed files with 25 additions and 12 deletions
  1. 12 1
      flaskbb/app.py
  2. 1 3
      flaskbb/configs/default.py
  3. 9 0
      flaskbb/plugins/spec.py
  4. 3 8
      flaskbb/utils/helpers.py

+ 12 - 1
flaskbb/app.py

@@ -38,7 +38,7 @@ from flaskbb.utils.helpers import (time_utcnow, format_date, time_since,
                                    crop_title, is_online, mark_online,
                                    crop_title, is_online, mark_online,
                                    forum_is_unread, topic_is_unread,
                                    forum_is_unread, topic_is_unread,
                                    render_template, render_markup,
                                    render_template, render_markup,
-                                   app_config_from_env)
+                                   app_config_from_env, get_alembic_locations)
 from flaskbb.utils.translations import FlaskBBDomain
 from flaskbb.utils.translations import FlaskBBDomain
 # permission checks (here they are used for the jinja filters)
 # permission checks (here they are used for the jinja filters)
 from flaskbb.utils.requirements import (IsAdmin, IsAtleastModerator,
 from flaskbb.utils.requirements import (IsAdmin, IsAtleastModerator,
@@ -77,8 +77,10 @@ def create_app(config=None):
     configure_context_processors(app)
     configure_context_processors(app)
     configure_before_handlers(app)
     configure_before_handlers(app)
     configure_errorhandlers(app)
     configure_errorhandlers(app)
+    configure_migrations(app)
     configure_translations(app)
     configure_translations(app)
     configure_logging(app)
     configure_logging(app)
+
     app.pluggy.hook.flaskbb_additional_setup(app=app, pluggy=app.pluggy)
     app.pluggy.hook.flaskbb_additional_setup(app=app, pluggy=app.pluggy)
 
 
     return app
     return app
@@ -293,6 +295,15 @@ def configure_errorhandlers(app):
     app.pluggy.hook.flaskbb_errorhandlers(app=app)
     app.pluggy.hook.flaskbb_errorhandlers(app=app)
 
 
 
 
+def configure_migrations(app):
+    """Configure migrations."""
+    plugin_dirs = app.pluggy.hook.flaskbb_load_migrations()
+    version_locations = get_alembic_locations(plugin_dirs)
+
+    app.config['ALEMBIC']['version_locations'] = version_locations
+    app.logger.info(app.config['ALEMBIC'])
+
+
 def configure_translations(app):
 def configure_translations(app):
     """Configure translations."""
     """Configure translations."""
 
 

+ 1 - 3
flaskbb/configs/default.py

@@ -12,8 +12,6 @@
 import os
 import os
 import sys
 import sys
 import datetime
 import datetime
-import glob
-from flaskbb.utils.helpers import get_alembic_branches
 
 
 
 
 class DefaultConfig(object):
 class DefaultConfig(object):
@@ -74,7 +72,7 @@ class DefaultConfig(object):
 
 
     ALEMBIC = {
     ALEMBIC = {
         'script_location': os.path.join(basedir, "migrations"),
         'script_location': os.path.join(basedir, "migrations"),
-        'version_locations': get_alembic_branches()
+        'version_locations': ''
     }
     }
     ALEMBIC_CONTEXT = {
     ALEMBIC_CONTEXT = {
         'render_as_batch': True
         'render_as_batch': True

+ 9 - 0
flaskbb/plugins/spec.py

@@ -26,6 +26,15 @@ def flaskbb_load_translations():
     """
     """
     Hook for registering translation folders.
     Hook for registering translation folders.
     """
     """
+
+
+@spec
+def flaskbb_load_migrations():
+    """
+    Hook for registering additional migrations
+    """
+
+
 @spec
 @spec
 def flaskbb_load_blueprints(app):
 def flaskbb_load_blueprints(app):
     """
     """

+ 3 - 8
flaskbb/utils/helpers.py

@@ -9,7 +9,6 @@
     :license: BSD, see LICENSE for more details.
     :license: BSD, see LICENSE for more details.
 """
 """
 import ast
 import ast
-import glob
 import itertools
 import itertools
 import operator
 import operator
 import os
 import os
@@ -25,7 +24,7 @@ import requests
 import unidecode
 import unidecode
 from babel.core import get_locale_identifier
 from babel.core import get_locale_identifier
 from babel.dates import format_timedelta as babel_format_timedelta
 from babel.dates import format_timedelta as babel_format_timedelta
-from flask import current_app, flash, g, redirect, request, session, url_for
+from flask import flash, g, redirect, request, session, url_for
 from flask_allows import Permission
 from flask_allows import Permission
 from flask_babelplus import lazy_gettext as _
 from flask_babelplus import lazy_gettext as _
 from flask_login import current_user
 from flask_login import current_user
@@ -525,18 +524,14 @@ def check_image(url):
     return error, True
     return error, True
 
 
 
 
-def get_alembic_branches():
+def get_alembic_locations(plugin_dirs):
     """Returns a tuple with (branchname, plugin_dir) combinations.
     """Returns a tuple with (branchname, plugin_dir) combinations.
     The branchname is the name of plugin directory which should also be
     The branchname is the name of plugin directory which should also be
     the unique identifier of the plugin.
     the unique identifier of the plugin.
     """
     """
-    basedir = os.path.dirname(os.path.dirname(__file__))
-    plugin_migration_dirs = glob.glob(
-        "{}/*/migrations".format(os.path.join(basedir, "plugins"))
-    )
     branches_dirs = [
     branches_dirs = [
         tuple([os.path.basename(os.path.dirname(p)), p])
         tuple([os.path.basename(os.path.dirname(p)), p])
-        for p in plugin_migration_dirs
+        for p in plugin_dirs
     ]
     ]
 
 
     return branches_dirs
     return branches_dirs