Просмотр исходного кода

Set correct alembic version location for plugins

Peter Justin 7 лет назад
Родитель
Сommit
6a1ebc23bf
4 измененных файлов с 25 добавлено и 12 удалено
  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,
                                    forum_is_unread, topic_is_unread,
                                    render_template, render_markup,
-                                   app_config_from_env)
+                                   app_config_from_env, get_alembic_locations)
 from flaskbb.utils.translations import FlaskBBDomain
 # permission checks (here they are used for the jinja filters)
 from flaskbb.utils.requirements import (IsAdmin, IsAtleastModerator,
@@ -77,8 +77,10 @@ def create_app(config=None):
     configure_context_processors(app)
     configure_before_handlers(app)
     configure_errorhandlers(app)
+    configure_migrations(app)
     configure_translations(app)
     configure_logging(app)
+
     app.pluggy.hook.flaskbb_additional_setup(app=app, pluggy=app.pluggy)
 
     return app
@@ -293,6 +295,15 @@ def configure_errorhandlers(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):
     """Configure translations."""
 

+ 1 - 3
flaskbb/configs/default.py

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

+ 9 - 0
flaskbb/plugins/spec.py

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

+ 3 - 8
flaskbb/utils/helpers.py

@@ -9,7 +9,6 @@
     :license: BSD, see LICENSE for more details.
 """
 import ast
-import glob
 import itertools
 import operator
 import os
@@ -25,7 +24,7 @@ import requests
 import unidecode
 from babel.core import get_locale_identifier
 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_babelplus import lazy_gettext as _
 from flask_login import current_user
@@ -525,18 +524,14 @@ def check_image(url):
     return error, True
 
 
-def get_alembic_branches():
+def get_alembic_locations(plugin_dirs):
     """Returns a tuple with (branchname, plugin_dir) combinations.
     The branchname is the name of plugin directory which should also be
     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 = [
         tuple([os.path.basename(os.path.dirname(p)), p])
-        for p in plugin_migration_dirs
+        for p in plugin_dirs
     ]
 
     return branches_dirs